<template>
  <div>
    <zw ref="myChild"></zw>
    <getFinger ref="myGetFinger"></getFinger>
    <div v-if="!drawer">
      <el-row :gutter="20" class="mb-2">
        <el-col :span="24">
          <el-card shadow="never">
            <div class="d-flex flex-wrap align-center justify-space-around font-style">
              <div class="flexLi my-3 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-zhanghao font-size-40 color-03A9F4"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-03A9F4">总住户</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="total" class="color-03A9F4"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
              <div class="flexLi my-3 d-flex flex-nowrap align-center  d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-tubiaozhizuomoban-101 font-size-40 color-03A9F4"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-03A9F4">已入住</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="isCheckin" class="color-03A9F4"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
              <div class="flexLi my-3 d-flex flex-nowrap align-center  d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-chazhaofangyuan font-size-40 color-03A9F4"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-03A9F4">未入住</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="noshowNum" class="color-03A9F4"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
              <div class="flexLi my-3 d-flex flex-nowrap align-center  d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-shebei font-size-40 color-03A9F4"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-03A9F4">已签约人数</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="checkinNum" class="color-03A9F4"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
              <div class="flexLi my-3 d-flex flex-nowrap align-center  d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-chaxun font-size-40 color-03A9F4"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-03A9F4">待签约人数</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="signedNum" class="color-03A9F4"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
              <div class="flexLi my-3 d-flex flex-nowrap align-center  d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-renyuanguanli font-size-40 color-F56C6C"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-F56C6C">已欠费人数</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="arrearsNum" class="color-F56C6C"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
              <div class="flexLi my-3 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
                <div class="mr-2">
                  <i class="iconfont httpicon-gongdanguanli font-size-40 color-ff9900"></i>
                </div>
                <div>
                  <div class="color-00000073 font-size-16 font-weight-700 color-ff9900">已到期人数</div>
                  <div class="font-size-24 mt-2">
                    <NumberGrow :value="expiredNum" class="color-ff9900"></NumberGrow><span
                      class="font-size-16 color-00000073 ml-1">人</span>
                  </div>
                </div>
              </div>
            </div>
          </el-card>
        </el-col>
      </el-row>
      <el-row :gutter="20" class="elrow">
        <el-col :span="24">
          <el-card shadow="nerver" class="paddcontent">
            <div class="handle-box">
              <div class="selectoptionClass" v-if="userInfo.type == 0">
                <selectoption></selectoption>
              </div>
              <el-input v-model="query.name" size="small" placeholder="姓名" class="handle-input width-3rem mr10"
                :clearable="true">
              </el-input>
              <el-input v-model="query.number" size="small" placeholder="证件号" class="handle-input width-3rem mr10"
                :clearable="true">
              </el-input>
              <el-input v-model="query.phone" size="small" placeholder="手机号" class="handle-input width-3rem mr10"
                :clearable="true">
              </el-input>
              <el-cascader style="width: 100%;" size="small" :options="roomlistZNodes" collapse-tags
                @change="checkNodeSearch" :props="{ multiple: true }" :clearable="true" class="width-3rem"></el-cascader>
              <el-button type="primary" size="small" icon="el-icon-search" @click="handleSearch"
                style="background: #FA8E00; border: none;">查询</el-button>
            </div>
          </el-card>
        </el-col>
        <el-col :span="8" style="display: none">
          <el-card shadow="hover" class="cardrelative aftercolor5 heightbt">
            <div class="contentc contentc1">
              <div class="contentleft">
                <div class="contenttitle">凭证</div>
                <div class="contentnum">40</div>
                <ul class="contentul">
                  <li><span>密码凭证</span><span>28</span></li>
                  <li><span>身份凭证</span><span>10</span></li>
                  <li><span>其他</span><span>2</span></li>
                </ul>
                <img src="../assets/img/pz15.png" alt="" class="pzimg" />
              </div>
              <div class="pieChart">
                <schart ref="bar" class="schart" canvasId="bar" :options="options"></schart>
              </div>
            </div>
          </el-card>
        </el-col>
      </el-row>
      <div class="userlist" v-if="activeiconfont">
        <div class="switchiconfont my-2">
          <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="adddbtn">
          <el-button type="primary" @click="handleSearch1" class="my-2" size="mini"
            style="background: #FA8E00; border: none;">添加</el-button>
          <el-button type="primary" @click="selectmoredel" class="my-2" size="mini"
            style="background: #FA8E00; border: none;">批量删除</el-button>
          <el-button type="primary" @click="exportfun" class="my-2" size="mini"
            style="background: #FA8E00; border: none;">导出租客</el-button>
          <el-button type="primary" @click="batchUpload" class="my-2" size="mini"
            style="background: #FA8E00; border: none;">批量上传</el-button>
          <!--          <el-button type="primary" @click="batchUploadpl" size="mini">批量生成</el-button>-->
          <!--          <el-button type="primary" size="mini" @click="drawerVisible=true">对比上传</el-button>-->
          <!-- <el-button type="primary" @click="batchProcessingData" size="mini">批量处理数据</el-button> -->
        </div>
        <div class="roomcontent">
          <div class="roomconli" v-for="(item, index) in userlist" :key="index">
            <personLi :data="item"></personLi>
            <div class="button-list">
              <div @click="operation('0', item)">房间管理</div>
              <div @click="operation('1', item)">凭证管理</div>
              <div @click="handleEdit(index, item)">编辑</div>
              <div @click="handleDelete(index, item)">删除</div>
              <div @click="operation('0', item)">续住/退租</div>
              <div @click="operation('0', item)">冻结管理</div>
            </div>
          </div>
        </div>
      </div>
      <div class="tablelist" v-if="!activeiconfont">
        <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="adddbtn">
          <el-button type="primary" @click="handleSearch1" size="mini"
            style="background: #FA8E00; border: none;">添加</el-button>
          <el-button type="primary" @click="selectmoredel" size="mini"
            style="background: #FA8E00; border: none;">批量删除</el-button>
          <el-button type="primary" @click="exportfun" size="mini"
            style="background: #FA8E00; border: none;">导出租客信息</el-button>
          <el-button type="primary" @click="batchUpload" size="mini"
            style="background: #FA8E00; border: none;">批量上传</el-button>
          <!-- <el-button type="primary" @click="batchProcessingData" size="mini">批量处理数据</el-button> -->
        </div>
        <el-table :data="userlist" border stripe class="table" ref="multipleTable" header-cell-class-name="table-header"
          @selection-change="handleSelectionChange" v-if="userliststatu" height="600">
          <el-table-column label="序号" type="index" width="80">
            <template slot-scope="scope">
              {{ total - ((currentPage4 - 1) * pageSize) - scope.$index }}
            </template>
          </el-table-column>
          <el-table-column prop="id" label="ID" width="55" align="center"></el-table-column>
          <el-table-column prop="name" label="名称"></el-table-column>
          <el-table-column prop="number" label="身份证号"></el-table-column>
          <el-table-column prop="cardId" label="卡号"></el-table-column>
          <el-table-column prop="phone" label="手机号"></el-table-column>
          <el-table-column prop="phone" label="账号"></el-table-column>
          <el-table-column label="性别" align="center">
            <template #default="scope">
              {{ scope.row.sex == 1 ? "男" : "女" }}
            </template>
          </el-table-column>
          <el-table-column label="门卡状态" align="center">
            <template #default="scope">
              <span v-if="scope.row.cardState == 1">正常</span>
              <span v-if="scope.row.cardState == 2">挂失</span>
              <span v-if="scope.row.cardState == 3">挂失冻结</span>
              <span v-if="scope.row.cardState == 4">冻结</span>
              <span v-if="scope.row.cardState == 5">预开户</span>
              <span v-if="scope.row.cardState == 6">过期</span>
            </template>
          </el-table-column>
          <el-table-column label="操作" width="350" align="center">
            <template #default="scope">
              <el-button type="text" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
              <el-button type="text" @click="operation('0', scope.row)">房间管理</el-button>
              <el-button type="text" @click="operation('1', scope.row)">凭证管理</el-button>
              <el-button type="text" @click="operation('0', scope.row)">续住/退租</el-button>
              <el-button type="text" @click="operation('0', scope.row)">冻结管理</el-button>
              <el-button type="text" class="red" @click="handleDelete(scope.$index, scope.row)">删除
              </el-button>
            </template>
          </el-table-column>
        </el-table>
        <div class="nulldiv" v-if="userlist.length == 0">
          <img src="../assets/img/no-rooms.dfc2fbf1.png" alt="" class="nullimg" />
          <div>暂无房源</div>
        </div>
      </div>
      <div class="paging">
        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage4"
          :page-sizes="[10, 20, 100, 200, 500, 1000]" :page-size="pageSize" :layout="paginationConfig" :total="total">
        </el-pagination>
      </div>
    </div>
    <el-dialog title="批量续租" :visible.sync="batchRenewalShow" width="30%">
      <el-form ref="batchRenewalFrom" :model="batchRenewalFrom" label-width="80px" class="temporary">
        <el-form-item label="开始时间">
          <el-date-picker v-model="batchRenewalFrom.startTime" :picker-options="pickerOptionsBegin" size="small"
            type="datetime" placeholder="选择日期时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="结束时间">
          <el-date-picker v-model="batchRenewalFrom.endTime" :picker-options="pickerOptionsBegin" size="small"
            type="datetime" placeholder="选择日期时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button size="small" @click="batchRenewalShow = false" type="primary">取消</el-button>
          <el-button size="small" @click="batchRenewalMethods" type="primary">确定</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>
    <div class="roomContentBox" v-if="drawer">
      <el-card class="box-card" v-if="activeName == 0">
        <el-button size="mini" @click="backTop">返回</el-button>
        <!-- <el-ipnut type="text" size="mini" v-model=""></el-ipnut> -->
        <el-button size="mini" @click="bindRoomTop" type="primary">绑定房间</el-button>
        <el-button type="primary" size="mini" @click="batchRenewal">批量续租</el-button>
        <el-button type="primary" size="mini" @click="batchLeaseback">批量退租</el-button>
        <el-button type="primary" size="mini" @click="batchfrozenMethods">批量冻结锁用户</el-button>
        <el-button type="primary" size="mini" @click="batchthawMethods">批量解冻锁用户</el-button>
        <el-button type="primary" size="mini" @click="issueVoucher">下发凭证</el-button>
        <el-table :data="roomScreen" stripe style="width: 100%;margin-top: 10px;" :height="tableheight"
          @selection-change="renewalOption">
          <el-table-column type="selection" width="55"></el-table-column>
          <el-table-column type="index" width="50" label="序号">
          </el-table-column>
          <el-table-column prop="roomName" label="房间名称">
          </el-table-column>
          <el-table-column prop="name" label="租金名称">
          </el-table-column>
          <el-table-column label="租期">
            <template #default="scope">
              {{ scope.row.startTime }} 至 {{ scope.row.endTime }}
            </template>
          </el-table-column>
          <el-table-column prop="address" label="操作">
            <template #default="scope">
              <el-button type="text" class="red" @click="rentWithdrawal(scope.$index, scope.row)">退租</el-button>
              <!--              <el-button type="text" class="red" @click="UnbindFun(scope.$index, scope.row)">解除绑定</el-button>-->
              <el-button type="text" class="green" @click="singleRenewalMethods(scope.$index, scope.row)">续租
              </el-button>
              <el-button type="text" @click="getLimitMethods(scope.$index, scope.row)">获取离线永久密码</el-button>
              <el-button type="text" @click="clearAllPassWord(scope.$index, scope.row)">获取清空密码</el-button>
              <el-button type="text" @click="timingPassword(scope.$index, scope.row)">获取对时密码</el-button>
              <el-button type="text" @click="limitedTimePassword(scope.$index, scope.row)">获取限时密码</el-button>
              <el-button type="text" class="red" @click="frozenMethods(scope.$index, scope.row)">冻结锁用户</el-button>
              <el-button type="text" class="green" @click="thawMethods(scope.$index, scope.row)">解冻锁用户</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-dialog title="选择冻结时间" :visible.sync="frozenDialog" width="30%">
          <el-form ref="bindRoomFormref" :model="frozenDataSelect" label-width="80px" class="temporary">
            <el-form-item label="开始时间">
              <el-date-picker v-model="value2[0]" size="small" type="datetime" placeholder="选择入住日期时间"
                default-time="00:00:00" :picker-options="pickerOptionsBegin">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="结束时间">
              <el-date-picker v-model="value2[1]" size="small" start-placeholder="" type="datetime" placeholder="选择退租日期时间"
                :picker-options="pickerOptionsEnd" default-time="00:00:00">
              </el-date-picker>
            </el-form-item>
            <el-form-item>
              <el-button size="small" @click="frozenTimeSureMethods" type="primary">确定</el-button>
            </el-form-item>
          </el-form>
        </el-dialog>
        <el-dialog title="选择绑定房间" :visible.sync="bindRoomStatus" width="30%">
          <el-form ref="bindRoomFormref" :model="bindRoomForm" label-width="80px" class="temporary">
            <el-form-item label="绑定房间">
              <el-cascader style="width: 100%;" size="small" :options="bindRoomlist" collapse-tags @change="checkNode"
                :props="{ multiple: true }" clearable></el-cascader>
            </el-form-item>
            <el-form-item label="开始时间">
              <el-date-picker v-model="value2[0]" size="small" type="datetime" placeholder="选择入住日期时间"
                default-time="00:00:00" :picker-options="pickerOptionsBegin">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="结束时间">
              <el-date-picker v-model="value2[1]" size="small" start-placeholder="" type="datetime" placeholder="选择退租日期时间"
                :picker-options="pickerOptionsEnd" default-time="00:00:00">
              </el-date-picker>
            </el-form-item>
            <el-form-item>
              <el-button size="small" @click="bindsave" type="primary">确定</el-button>
            </el-form-item>
          </el-form>
        </el-dialog>
      </el-card>
      <el-card class="box-card" v-if="activeName == 1">
        <div v-if="roomstatus1">
          <el-button size="mini" @click="backTop">返回</el-button>
          <el-button type="primary" size="mini" @click="bindroom1">添加凭证</el-button>
          <el-button type="primary" size="mini" @click="addBindRoom">绑定房间</el-button>
          <el-select v-model="credentialSearch.type" placeholder="请选择类型" class="SearchInput" size="mini" clearable>
            <el-option label="人脸" value="10"></el-option>
            <el-option label="指纹" value="11"></el-option>
            <el-option label="身份证" value="12"></el-option>
            <el-option label="NFC" value="13"></el-option>
            <el-option label="密码" value="14"></el-option>
          </el-select>
          <el-button type="primary" size="mini" @click="getcertificate">查询</el-button>
          <el-button type="primary" size="mini" @click="credentialSearchReset">重置</el-button>
          <el-table :data="roomtable1" class="table" style="width: 100%;margin-top: 10px;" :height="tableheight"
            ref="multipleTable" @selection-change="handleSelectionChange3" :row-class-name="tableRowClassName"
            header-cell-class-name="table-header">
            <el-table-column type="selection" width="55"></el-table-column>
            <el-table-column prop="name" label="租客名称"></el-table-column>
            <el-table-column label="凭证名称">
              <template #default="scope">
                <span>{{ scope.row.pzname }}</span><span v-if="scope.row.fingerprintAlias">—
                  {{ scope.row.fingerprintAlias }}</span>
              </template>
            </el-table-column>
            <el-table-column label="凭证类型">
              <template #default="scope">
                <span v-if="scope.row.type == 10">人脸</span>
                <span v-if="scope.row.type == 11">指纹</span>
                <span v-if="scope.row.type == 12">身份证</span>
                <span v-if="scope.row.type == 13">NFC</span>
                <span v-if="scope.row.type == 14">密码</span>
              </template>
            </el-table-column>
            <!--            <el-table-column prop="number" width="400" label="凭证有效期">-->
            <!--              <template #default="scope">-->
            <!--                <span>{{ scope.row.startTimeText }} - {{ scope.row.endTimeText }}</span>-->
            <!--              </template>-->
            <!--            </el-table-column>-->
            <el-table-column label="创建时间" prop="createAt" width="200"></el-table-column>
            <el-table-column label="操作" width="400" align="center" class-name="tablebutton">
              <template #default="scope">
                <el-button type="text" @click="bindRoomTop1(scope.$index, scope.row)"
                  v-if="scope.row.DeletePermissions">批量下发
                </el-button>
                <el-button type="text" @click="modifyCrai(scope.$index, scope.row)">修改凭证</el-button>
                <el-button type="text" @click="viewDistributionRecord(scope.$index, scope.row)">查看下发记录
                </el-button>
                <el-button type="text" class="red" @click="deletefun1(scope.$index, scope.row)">删除
                </el-button>
                <el-button type="text" class="red" v-if="userInfo.type == 0"
                  @click="deleteCertificatesMethod(scope.$index, scope.row)">删除平台记录
                </el-button>
              </template>
            </el-table-column>
          </el-table>
          <el-dialog title="选择下发房间" :visible.sync="bindRoomStatus1" width="30%">
            <el-form ref="bindRoomFormref" :model="bindRoomForm" label-width="80px" class="temporary">
              <el-form-item label="房源">
                <el-cascader style="width: 100%;" size="small" :options="roomlist" collapse-tags clearable
                  @change="checkNode1" :props="{ multiple: true }"></el-cascader>
              </el-form-item>
              <el-form-item label="开始时间">
                <el-date-picker v-model="value2[0]" size="small" :picker-options="pickerOptionsBegin" type="datetime"
                  placeholder="选择开始日期时间" default-time="00:00:00">
                </el-date-picker>
              </el-form-item>
              <el-form-item label="结束时间">
                <el-date-picker v-model="value2[1]" size="small" :picker-options="pickerOptionsEnd" type="datetime"
                  placeholder="选择结束日期时间" default-time="00:00:00">
                </el-date-picker>
              </el-form-item>
              <el-form-item>
                <el-button size="small" @click="sendVoucher" type="primary">确定</el-button>
              </el-form-item>
            </el-form>
          </el-dialog>
          <div class="pagepg">
            <el-pagination @size-change="handleSizeChange1" @current-change="handleCurrentChange1"
              :current-page="currentPage1" :page-sizes="[10, 30, 100, 200]" :page-size="pageSize1" layout="total"
              :total="total1">
            </el-pagination>
          </div>
          <div class="colorTest" style="color: #999;font-size: 12px;">*每行数据颜色背景标注：1、绿色背景代表该凭证对应下发指令都下发成功
            2、黄色代表该凭证对应下发指令有下发中指令 3、红色代表该凭证对应下发指令有下发失败指令
          </div>
        </div>
        <div v-else>
          <!-- 录入凭证 -->
          <div class="ztree">
            <el-form ref="formvoucher" :model="voucher" :rules="rulesAdd" label-width="80px" class="temporary">
              <el-form-item label="用户名称" prop="username">
                <el-input v-model="voucher.username" size="middle" :disabled="true" class="widthRem5"></el-input>
              </el-form-item>
              <el-form-item label="凭证名称" prop="pzname">
                <el-input v-model.trim="voucher.pzname" size="middle" :clearable="true" class="widthRem5"></el-input>
              </el-form-item>
              <el-form-item label="类型" prop="documentType">
                <el-select v-model="documentType" placeholder="请选择" size="middle" class="documentType">
                  <el-option label="人脸" :value="10"></el-option>
                  <el-option label="指纹" :value="11"></el-option>
                  <el-option label="身份证" :value="12"></el-option>
                  <el-option label="NFC" :value="13"></el-option>
                  <el-option label="密码" :value="14"></el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="上传照片" v-if="documentType == 10">
                <div v-if="documentType == 10">
                  <el-upload action="#" list-type="picture-card" size="middle" :auto-upload="false"
                    :modal-append-to-body="false">
                    <i slot="default" class="el-icon-plus"></i>
                    <div slot="file" slot-scope="{ file }">
                      <img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
                      <span class="el-upload-list__item-actions">
                        <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
                          <i class="el-icon-zoom-in"></i>
                        </span>
                        <span v-if="!disabled1" class="el-upload-list__item-delete" @click="handleDownload(file)">
                          <i class="el-icon-download"></i>
                        </span>
                        <span v-if="!disabled1" class="el-upload-list__item-delete" @click="handleRemove(file)">
                          <i class="el-icon-delete"></i>
                        </span>
                      </span>
                    </div>
                  </el-upload>
                  <el-dialog :visible.sync="dialogVisible" :modal-append-to-body="false">
                    <img width="100%" :src="dialogImageUrl" alt="" />
                  </el-dialog>
                </div>
              </el-form-item>
              <el-form-item label="指纹" v-if="documentType == 11">
                <el-radio-group v-model="voucher.fingerprintAlias" size="small">
                  <!-- @change="fingerprintAliasMethod" -->
                  <el-radio-button label="左手大拇指"></el-radio-button>
                  <el-radio-button label="左手食指"></el-radio-button>
                  <el-radio-button label="右手大拇指"></el-radio-button>
                  <el-radio-button label="右手食指"></el-radio-button>
                </el-radio-group>
                <el-button type="primary" @click="addfir" size="small">GX1000-zh采集指纹</el-button>
                <el-button type="primary" @click="getFingerData" size="small">LWJ采集指纹</el-button>
                <iframe src="static/equipment/mafp_serial/index.html" frameborder="0" style="width: 100%; height: 350px"
                  id="iframeBox"></iframe>
              </el-form-item>
              <el-form-item label="身份证" v-if="documentType == 12" prop="idcard">
                <el-input placeholder="请输入内容" v-model.trim="voucher.idcard" class="widthRem5" size="middle"
                  :clearable="true" @change="avoidRepetition($event, 12)">
                  <el-button slot="append" @click.native="addNfc">GX1000-zh采集卡</el-button>
                </el-input>
              </el-form-item>
              <el-form-item label="NFC卡号" v-if="documentType == 13" prop="nfc">
                <el-input placeholder="请输入内容" v-model.trim="voucher.nfc" class="widthRem5" size="middle" :clearable="true"
                  @change="avoidRepetition($event, 13)">
                  <el-button slot="append" @click.native="addNfc">GX1000-zh采集卡</el-button>
                </el-input>
                <el-switch v-model="regularCard" active-text="是否是常开卡" active-color="#13ce66" inactive-color="#ff4949">
                </el-switch>
              </el-form-item>
              <el-form-item label="密码" v-if="documentType == 14" prop="password">
                <el-input v-model.trim="voucher.password" type="number" size="middle" class="widthRem5" maxlength="6"
                  :clearable="true" @change="avoidRepetition($event, 14)" show-password>
                </el-input>
              </el-form-item>
              <el-form-item label="开始时间">
                <el-date-picker v-model="value2[0]" size="small" :picker-options="pickerOptionsBegin" type="datetime"
                  placeholder="选择开始日期时间" default-time="00:00:00">
                </el-date-picker>
              </el-form-item>
              <el-form-item label="结束时间">
                <el-date-picker v-model="value2[1]" size="small" :picker-options="pickerOptionsEnd" type="datetime"
                  placeholder="选择结束日期时间" default-time="00:00:00">
                </el-date-picker>
              </el-form-item>
            </el-form>
          </div>
          <el-button type="primary" size="small" @click="bindsave1">保存</el-button>
          <el-button type="primary" size="small" @click="bindroom1">返回</el-button>
        </div>

      </el-card>
      <el-card class="box-card" v-if="activeName == 2">
        <div>
          <el-button @click="continuationManagementBack" size="mini">返回</el-button>
          <el-button type="primary" size="mini" @click="deleAll">批量删除</el-button>
          <el-input type="text" size="mini" v-model="recordFilterCondition.deviceNum" placeholder="请输入设备号"
            class="SearchInput" clearable></el-input>
          <el-input type="text" size="mini" v-model="recordFilterCondition.imei" placeholder="请输入IMEI号"
            class="SearchInput" clearable></el-input>
          <el-cascader :options="bindRoomlist" clearable v-model="recordFilterCondition.roomId" @change="checkNodeRecord"
            size="mini" collapse-tags class="SearchInput" placeholder="请选择对应房间"
            :props="{ checkStrictly: true }"></el-cascader>
          <!-- <el-select v-model="recordFilterCondition.type" placeholder="请选择类型" class="SearchInput" size="mini"
						clearable>
						<el-option label="指纹" value="1"></el-option>
						<el-option label="身份证" value="2"></el-option>
						<el-option label="NFC" value="3"></el-option>
						<el-option label="密码" value="4"></el-option>
					</el-select> -->
          <el-select v-model="recordFilterCondition.status" placeholder="请选择下发状态" class="SearchInput" size="mini"
            clearable>
            <el-option label="下发成功" value="1"></el-option>
            <el-option label="等待发送" value="700"></el-option>
            <el-option label="下发中" value="0"></el-option>
            <el-option label="发送失败" value="702"></el-option>
            <el-option label="已作废" value="703"></el-option>
          </el-select>
          <el-button type="primary" size="mini" @click="obtainVoucherIssuanceRecord">查询</el-button>
          <el-button type="primary" size="mini" @click="recordFilterConditionReset">重置</el-button>
          <el-table :data="sendListRecords" stripe style="width: 100%;margin-top: 10px;" :height="tableheight"
            @selection-change="handleSelectionChange4" border>
            <el-table-column type="selection" width="55"></el-table-column>
            <el-table-column prop="name" label="租客名称"></el-table-column>
            <el-table-column prop="pzname" label="凭证名称"></el-table-column>
            <el-table-column prop="roomName" label="房间名称"></el-table-column>
            <el-table-column prop="deviceNum" label="设备号"></el-table-column>
            <el-table-column label="锁端凭证类型">
              <template #default="scope">
                <!--                <span v-if="scope.row.type == 0">人脸</span>-->
                <span v-if="scope.row.type == 1">指纹</span>
                <span v-if="scope.row.type == 2">身份证</span>
                <span v-if="scope.row.type == 3">NFC</span>
                <span v-if="scope.row.type == 4">密码</span>
              </template>
            </el-table-column>
            <el-table-column width="400" label="锁端凭证有效期">
              <template #default="scope">
                <span>{{ scope.row.startTimeText }} - {{ scope.row.endTimeText }}</span>
              </template>
            </el-table-column>
            <el-table-column label="下发状态" prop="statusText"></el-table-column>
            <el-table-column label="创建时间" prop="createAt" width="200"></el-table-column>
            <el-table-column label="操作" width="250" align="center">
              <template #default="scope">
                <el-button type="text" class="red" @click="Issue(scope.$index, scope.row)">重新下发
                </el-button>
                <el-button type="text" class="red" @click="deleteCertificateMethod(scope.$index, scope.row)">删除
                </el-button>
                <el-button type="text" class="red" v-if="userInfo.type == 0"
                  @click="deleteCertificatesMethod(scope.$index, scope.row)">删除平台记录
                </el-button>
              </template>
            </el-table-column>
          </el-table>
          <div class="pagepg">
            <el-pagination @size-change="handleSizeChange1" @current-change="handleCurrentChange1"
              :current-page="currentPage1" :page-sizes="[10, 30, 100, 200]" :page-size="pageSize1"
              layout="total, sizes, prev, pager, next, jumper" :total="total1">
            </el-pagination>
          </div>
        </div>
      </el-card>
    </div>
    <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 size="mini" class="importBtn" @click="exportBtn">下载模板</el-button>
      <div style="overflow: auto;">
        <el-table :data="userlist1" v-if="userlist1statu" border class="table" ref="multipleTable1"
          header-cell-class-name="table-header" @selection-change="handleSelectionChange1" height="400"
          style="width: 100%;">
          <el-table-column prop="name" label="名称"></el-table-column>
          <el-table-column prop="siteName" label="绑定房间"></el-table-column>
          <el-table-column prop="number" label="身份证号" width="150"></el-table-column>
          <el-table-column prop="cardId" label="NFC" width="150"></el-table-column>
          <el-table-column prop="phone" label="手机号" width="150"></el-table-column>
          <el-table-column label="开锁方式" align="center">
            <template #default="scope">
              <span v-if="scope.row.mode == 4">密码</span>
              <span v-else-if="scope.row.mode == 3">NFC</span>
              <span v-else="scope.row.mode==2">身份证</span>
            </template>
          </el-table-column>
          <el-table-column prop="modeContent" label="内容" width="150"></el-table-column>
          <el-table-column label="有效期" align="center" width="450">
            <template #default="scope">
              <el-date-picker v-model="value3" type="datetimerange" @input="handleDate" align="right"
                start-placeholder="开始日期" end-placeholder="结束日期">
              </el-date-picker>
            </template>
          </el-table-column>
          <el-table-column label="性别" align="center">
            <template #default="scope">
              {{ scope.row.sex == 1 ? "男" : "女" }}
            </template>
          </el-table-column>
        </el-table>
      </div>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="uploadkj = false">取 消</el-button>
          <el-button type="primary" @click="batchUploadfun">确 定</el-button>
        </span>
      </template>
    </el-dialog>
    <el-dialog title="编辑" :visible.sync="editVisiblelist" width="50%" :lock-scroll="true">
      <el-form ref="form" :rules="rules" :model="form" label-width="80px">
        <el-form-item label="名称" prop="name">
          <el-input v-model="form.name" :clearable="true"></el-input>
        </el-form-item>
        <el-form-item label="身份证号" prop="number">
          <el-input v-model="form.number" :clearable="true"></el-input>
        </el-form-item>
        <el-form-item label="身份" prop="type">
          <el-select v-model="form.type" class="widthThree" placeholder="请选择身份" clearable>
            <el-option :label="item.label" :value="item.value" v-for="(item, index) in userTypeList" :key="index">
            </el-option>
          </el-select>
        </el-form-item>
        <!--        <el-form-item label="NFC" prop="cardId">-->
        <!--          <el-input v-model="form.cardId" :clearable="true" :disabled="modify ? false : true"></el-input>-->
        <!--        </el-form-item>-->
        <el-form-item label="手机号" prop="phone">
          <el-input v-model="form.phone" type="number" placeholder="为11位手机号" :clearable="true"
            :disabled="modify ? false : true"></el-input>
        </el-form-item>
        <!--        <el-form-item label="卡状态">-->
        <!--          <el-select v-model="form.cardState" placeholder="请选择" clearable>-->
        <!--            <el-option v-for="item in cardstatus" :key="item.value" :label="item.label" :value="item.value">-->
        <!--            </el-option>-->
        <!--          </el-select>-->
        <!--        </el-form-item>-->
        <el-form-item label="所属部门" prop="enterpriseId">
          <el-cascader :options="enterpriseListOption" v-model="defaultEnterpriseId" ref="cascader" :props="props"
            collapse-tags clearable @change="checkEnterpriseList"></el-cascader>
        </el-form-item>
        <el-form-item label="性别" disabled>
          <el-radio v-model="form.sex" :label="1">男</el-radio>
          <el-radio v-model="form.sex" :label="2">女</el-radio>
        </el-form-item>
        <el-form-item label="密码">
          <el-input v-model="form.key" :clearable="true"></el-input>
        </el-form-item>
        <el-form-item label="创建账号" disabled v-if="modify">
          <el-switch v-model="WhetherToGreatAnAccount" active-color="#13ce66" inactive-color="#ff4949">
          </el-switch>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="editVisiblelist = false">取 消</el-button>
          <el-button type="primary" @click="saveEdit" v-if="modify">确 定</el-button>
          <el-button type="primary" @click="modifyEdit" v-else>修 改</el-button>
        </span>
      </template>
    </el-dialog>
    <el-dialog title="修改" :visible.sync="certificatestatus" width="50%">
      <el-form ref="formvoucher1" :model="certificatesContent" label-width="80px" class="temporary">
        <el-form-item label="凭证名称">
          <el-input v-model="certificatesContent.pzname" :disabled="true" :clearable="true"></el-input>
        </el-form-item>
        <el-form-item label="开始时间">
          <el-date-picker v-model="value2[0]" size="small" :picker-options="pickerOptionsBegin" type="datetime"
            placeholder="选择开始日期时间" default-time="00:00:00">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="结束时间">
          <el-date-picker v-model="value2[1]" size="small" :picker-options="pickerOptionsBegin" type="datetime"
            placeholder="选择结束日期时间" default-time="00:00:00">
          </el-date-picker>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="certificatestatus = false">取 消</el-button>
          <el-button type="primary" @click="modifyCraiFun">确 定</el-button>
        </span>
      </template>
    </el-dialog>
    <el-dialog :title="freeUserTitle" :visible.sync="freeUserDialog" width="40%">
      <el-form ref="formvoucher1" :model="certificatesContent" label-width="80px" class="temporary">
        <el-form-item label="开始时间">
          <el-date-picker v-model="freeUserDate[0]" size="small" type="datetime" placeholder="选择开始日期时间"
            default-time="12:00:00">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="结束时间">
          <el-date-picker v-model="freeUserDate[1]" size="small" type="datetime" placeholder="选择结束日期时间"
            default-time="12:00:00">
          </el-date-picker>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="freeUserDialog = false">取 消</el-button>
          <el-button type="primary" @click="freeUserConfirm" v-if="batchFreeShow">冻 结</el-button>
          <el-button type="primary" @click="batchFreeUserConfirm" v-if="!batchFreeShow">冻结</el-button>
        </span>
      </template>
    </el-dialog>
    <el-drawer title="" :visible.sync="drawerVisible" direction="rtl" size="80%" :before-close="handleClose">
      <contrast @contrastMethods="backTableMethods" @getAboutRoom="getAboutRoom"></contrast>
    </el-drawer>
  </div>
</template>

<script>
import Schart from "vue-schart";
import {
  httpPost,
  download, setCode,
  httpGet,
  httgetaxio1
} from "../api";
import zTree from "../components/zTree1.vue";
import userContent from "../components/usercontent.vue";
import personLi from "../components/personLi.vue";
import contrast from "../components/contrast/contrast.vue"
import XLSX from "xlsx";
import zw from "./zw.vue"
import getFinger from "./getFinger.vue"
import md5 from 'js-md5'
import ICINLocker from "../utils/equipment.js"
import {
  timestampToTime,
  dec2hex,
  group,
  ztreeToElementTree2,
  ztreeToElementTree,
  recursion,
  uniqueArray,
  duplicateRemoval,
  delArrVal,
  isContained,
  timeTotimeimp,
  getcurrentTime,
  getcurrentTime1,
  reverse
} from "../utils/index";

let nowDate = new Date()
var currentTime = nowDate
var endcurrentTime = getcurrentTime1(6)
import axios from "axios"
import utils from "../utils/util.js";
import IdentityCodeValid from '../utils/verification.js'
import RequestSet from "../api/allFun.js";
import moment from 'moment'
import NumberGrow from "../components/visualizcomponent/NumberGrow.vue";

export default {
  inject: ['reload'],
  name: "campus",
  data() {
    return {
      isCheckin: 0,  // 已入住人数
      checkinNum: 0,  // 已签约
      noshowNum: 0,  // 未入住人数
      signedNum: 0,  // 待签约
      arrearsNum: 0, // 已欠费
      expiredNum: 0, // 已到期
      frozenDialog: false,//冻结用户选择时间
      frozenDataSelect: { time: '', timeOne: '' },
      roomScreen: [],//筛选只展示房间，不展示层级
      paginationConfig: 'total, sizes, prev, pager, next, jumper',
      pickerOptionsBegin: {
        disabledDate: time => {
          // time为形参，实参就是自动获取到的beginTime元素可以选的值
          let maxDateTimeOne = new Date(this.maxDateTime).getTime()
          let minDateTimeOne = new Date(this.minDateTime).getTime()
          return time.getTime() > maxDateTimeOne || time.getTime() < minDateTimeOne
        }
      },
      pickerOptionsEnd: {
        disabledDate: time => {
          let maxDateTimeOne = new Date(this.value2[0]).getTime()
          return time.getTime() < maxDateTimeOne; /*今天及之前*/
        }
      },
      regularCard: false,
      drawerVisible: false,
      props: {
        multiple: true,
        emitPath: false
      },
      defaultEnterpriseId: [],
      defaultEnterpriseIdBack: [],
      checkEnterpriseNode: [],
      enterpriseListOption: [],
      WhetherToGreatAnAccount: false,
      dateRange: [],
      batchCredentialList: [],
      multipleSelection4: [],
      // 记录筛选条件
      recordFilterCondition: {
        imei: '',
        deviceNum: '',
        status: '',
        type: '',
        roomId: ''
      },
      sendListRecords: [],
      bindSelectedList: [], //选定绑定房间列表
      bindRoomlist: [], //房源列表
      rulesAdd: {
        username: [{
          required: true,
          message: '请输入姓名',
          trigger: 'blur'
        },],
        documentType: [{
          required: true,
          message: '请选择凭证类型',
          trigger: 'blur'
        },],
        pzname: [{
          required: true,
          message: '请输入凭证名称',
          trigger: 'blur'
        },],
        nfc: [{
          required: true,
          message: '请输入NFC',
          trigger: 'blur'
        },],
        idcard: [{
          required: true,
          message: '请输入卡号',
          trigger: 'blur'
        },],
        password: [{
          required: true,
          message: '请输入密码',
          trigger: 'blur'
        },]
      },
      rules: {
        roomlistVoucher: [],
        SelectedListVoucher: [],
        name: [{
          required: true,
          message: '请输入姓名',
          trigger: 'blur'
        },],
        cardId: [{
          required: true,
          message: '请输入卡号',
          trigger: 'blur'
        },],
        number: [{
          required: true,
          message: '请输入身份证号',
          trigger: 'blur'
        },],
        phone: [{
          required: true,
          message: '请输入电话',
          trigger: 'blur'
        },],
        enterpriseId: [{
          required: true,
          message: '请选择所属部门',
          trigger: 'blur'
        },],
        type: [{
          required: true,
          message: '请选择身份角色',
          trigger: 'blur'
        },],
      },
      tableheight: 0,
      credentialSearch: {
        deviceNum: '',
        imei: '',
        status: '',
        roomId: '',
        type: ''
      },
      selectoption: [],
      selectoptionValue: '',
      enterpriselist: [],
      continuationManagementDate: {
        time: ''
      },
      continuationManagementStatus: false,
      Reissueform: {},
      Reissue: '',
      bindRoomStatus: false,
      bindRoomStatus1: false,
      drawer: false,
      zNodes: [],
      allroomlist: [],
      selectRow: [],
      bindRoomForm: {},
      modify: true,
      roomlistZNodes: [],
      roonNameTop: '',
      lsmm: {},
      roomtablestatus1: true,
      SelectedList: [],
      documentType1: "请选择",
      certificatestatus: false,
      dialogImageUrl: "",
      dialogVisible: false,
      pageSize1: 10,
      disabled1: false,
      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,
        },
      },
      value2: ['', ''],
      value3: ['', ''],
      userliststatu: true,
      roomstatus: true,
      roomstatus1: true,
      roomtable: [],
      roomtable1: [],
      roomtable2: [],
      roomtableStatus: true,
      activeName: "0",
      limitUpload: 1000,
      arr: [],
      cardstatus: [{
        value: 1,
        label: "正常",
      },
      {
        value: 4,
        label: "冻结",
      }
      ],
      currentPage4: 1,
      currentPage1: 1,
      currentPage2: 1,
      editVisiblelist: false,
      userlist: [],
      userlist1: [],
      userlist1statu: true,
      modifyStatus: true,
      options: {
        type: "pie",
        xRorate: 25,
        legend: {
          position: "left",
        },
        showValue: false,
        bgColor: "rgba(255,255,255,0)",
        labels: ["密码凭证", "身份凭证", "其他"],
        datasets: [{
          data: [28, 10, 2],
        },],
      },
      query: {
        cardId: "",
        number: "",
        name: "",
        type: 0,
        pzname: "",
      },
      tableData: [],
      total1: 0,
      total2: 0,
      multipleSelection: [],
      multipleSelection1: [],
      multipleSelection2: [],
      multipleSelection3: [],
      delList: [],
      editVisible: false,
      pageTotal: 0,
      form: {
        sex: 1,
        cardState: 1,
        name: "",
        number: "",
        cardId: "",
        phone: "",
        enterpriseId: '',
        type: '',
        fingerprintAlias: ''
      },
      idx: -1,
      id: -1,
      activeiconfont: true,
      normal: 0,
      total: 0,
      frozen: 0,
      lose: 0,
      uploadkj: false,
      file: "",
      fileTemp: "",
      files: "",
      treedata: {},
      drawerRow: {},
      deviceList: [],
      userlistquery: [],
      userlistquery1: [],
      temporaryPassword: '',
      documentType: "请选择",
      voucher: {
        username: "",
        pzname: "",
        nfc: "",
        idcard: "",
        password: "123456",
        fingerprintAlias: ""
      },
      bindroomstatus: true,
      fingerprintTransfer: 0,
      fingerprintId: 0,
      checkList: "",
      margkli: "",
      roomlist: [],
      roomlist2: [],
      defaultProps: {
        children: "children",
        label: "name",
        disabled: this.disabledFn,
      },
      selectkey: [],
      certificatesContent: {
        pzname: ""
      },
      certificatesRow: {},
      selectkey1: "",
      addroomstatus: true,
      selectkeyadd: [],
      selectRoomdeletelist: [], //多选删除房间数据
      roomlist1: [],
      AboutDevice: [],
      reissue: {
        voucher: ""
      },
      modifyrow: {},
      modifyvalue2: [currentTime, endcurrentTime],
      allAboutDevice: [],
      localFingerprint: {},
      selectRoom: true,
      personname: '操作',
      pageNum: 1,
      pageSize: 10,
      userInfo: {
        type: ''
      },
      viewRecordSelected: {
        password: ''
      },
      batchRenewalList: [],
      batchRenewalShow: false,
      batchRenewalFrom: {
        startTime: '',
        endTime: ''
      },
      checkInListing: [],
      freeUserManageRow: [],
      freeUserDate: [],
      freeUserDialog: false,
      batchFreeShow: true,
      freeUserTitle: '冻结用户',
      userTypeList: [],
      maxDateTime: '',
      minDateTime: ''
    };
  },
  computed: {
  },
  created() {
    this.userTypeList = this.$MANUFACTURER.userType
    this.$store.commit('getTree')
    this.tableheight = document.documentElement.clientHeight - 240
    this.userInfo = JSON.parse(localStorage.getItem('info'))
    this.form.enterpriseId = this.userInfo.enterpriseId
    this.getAboutRoom();
    this.getEnterprise()
    this.getalllist();
    // this.getcardstatus();
    this.getAboutDevice(); //获取和房间相关的设备
    this.getlockUser()
    this.selectoption = JSON.parse(localStorage.getItem('selectoption'))
    this.selectoptionValue = localStorage.getItem('tenantId')

    if (document.documentElement.clientWidth < 1080) {
      this.paginationConfig = 'total, prev, pager, next'
    } else {
      this.paginationConfig = 'total, sizes, prev, pager, next, jumper'
    }
  },
  components: {
    Schart,
    userContent,
    zTree,
    personLi,
    zw, getFinger,
    contrast,
    NumberGrow
  },
  mounted() {
    // 获取全部合同
    this.getLeasesList()
    // document.addEventListener('keydown', this.keyDown)
    setTimeout(() => {
      this.handleSearch()
      var q = {};
      var data = {
        pageNum: 0,
        pageSize: 0,
        orderBy: "create_time desc",
        q: JSON.stringify(q),
      };
      let roomAbout = this.$store.state.roomAbout
      httpPost(data, this.$api.getlistNum).then((res1) => {
        res1.data.list.map((li, index) => {
          this.$store.commit("increment", 1);
          li['rommNameText'] = this.screenRoomName(li.id)
          if(li["rommNameText"] != '') {
            this.isCheckin++
          }else{
            this.noshowNum++
          }
        });
      });
    }, 800)
  },
  beforeDestroy() {
    this.$store.commit("increment", 1);
  },
  methods: {
    // 获取全部合同
    getLeasesList() {
      let data = {
        pageNum: 0,
        pageSize: 0,
        orderBy: "create_time desc"
      }
      httpPost(data, this.$api.postLeasesList).then(res => {
        let total = res.data.total
        console.log(res);
        var checkinNum = 0
        var signedNum = 0
        var arrearsNum = 0
        var expiredNum = 0
        if (res.success) {
          res.data.list.map(li => {
            // 待签约
            if (li.status == 0) {
              signedNum++
            } else if (li.status == 1) {
              // 已签约
              checkinNum++
            } else if (li.status == 2) {
              // 已欠费
              arrearsNum++
            } else if (li.status == 4) {
              // 已到期
              expiredNum++
            }
          })
          this.signedNum = signedNum
          this.checkinNum = checkinNum
          this.arrearsNum = arrearsNum
          this.expiredNum = expiredNum
        } else {
          this.$message.error(res.message)
        }
      })
    },
    // 限时密码
    limitedTimePassword(index, row) {
      const startTime = moment(new Date().getTime()).format("YYYY-MM-DD HH:mm:ss")
      const endTime = moment(new Date().getTime() + 4 * 60 * 1000).format("YYYY-MM-DD HH:mm:ss")
      let data3 = {
        code: "/zg/offlinepassword/limit",
        data: {
          userName: JSON.parse(this.drawerRow.info).userId,
          lockId: row.deviceNum,
          startTime: startTime,
          endTime: endTime
        },
      };

      this.$confirm('此操作将获取限时密码, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        httpPost(data3, this.$api.sendCommand).then((res4) => {
          if (res4.success) {
            this.$alert(`${res4.data}`, '限时密码', {
              confirmButtonText: "确定",
              callback: action => {

              }
            })
          }
        })
      })
    },
    // 对时密码
    timingPassword(index, row) {
      const startTime = moment(new Date().getTime()).format("YYYY-MM-DD HH:mm:ss")
      const endTime = moment(new Date().getTime() + 24 * 60 * 60 * 1000).format("YYYY-MM-DD HH:mm:ss")
      let data3 = {
        code: "/zg/offlinepassword/correctTime",
        data: {
          userName: JSON.parse(this.drawerRow.info).userId,
          lockId: row.deviceNum,
        },
      };

      this.$confirm('此操作将获取对时密码, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        httpPost(data3, this.$api.sendCommand).then((res4) => {
          if (res4.success) {
            this.$alert(`${res4.data}`, '对时密码', {
              confirmButtonText: "确定",
              callback: action => {

              }
            })
          }
        })
      })
    },
    // 清空所有密码
    clearAllPassWord(index, row) {
      const startTime = moment(new Date().getTime()).format("YYYY-MM-DD HH:mm:ss")
      const endTime = moment(new Date().getTime() + 24 * 60 * 60 * 1000).format("YYYY-MM-DD HH:mm:ss")
      let data3 = {
        code: "/zg/offlinepassword/clear",
        data: {
          userName: JSON.parse(this.drawerRow.info).userId,
          lockId: row.deviceNum,
          startTime: startTime,
          // endTime:endTime,
        },
      };

      this.$confirm('此操作将获取清空密码, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        httpPost(data3, this.$api.sendCommand).then((res4) => {
          if (res4.success) {
            this.$alert(`${res4.data}`, '清空密码', {
              confirmButtonText: "确定",
              callback: action => {

              }
            })
          }
        })

      })
    },
    /*获取临时离线密码*/
    getLimitMethods(index, row) {
      const startTime = moment(new Date().getTime()).format("YYYY-MM-DD HH:mm:ss")
      const endTime = moment(new Date().getTime() + 24 * 60 * 60 * 1000).format("YYYY-MM-DD HH:mm:ss")
      let data3 = {
        code: "/zg/offlinepassword/forever",
        data: {
          userName: JSON.parse(this.drawerRow.info).userId,
          lockId: row.deviceNum,
          startTime: startTime,
          // endTime:endTime,
        },
      };
      httpPost(data3, this.$api.sendCommand).then((res4) => {
        if (res4.success) {
          this.$alert(`${res4.data}`, '离线密码', {
            confirmButtonText: "确定",
            callback: action => {

            }
          })
        }
      })
    },
    // 对比结果
    backTableMethods(data) {
      console.log(data)
    },
    tableRowClassName({
      row,
      rowIndex
    }) {
      if (row.color == '0') {
        return "wait-row"
      } else if (row.color == '1') {
        return "success-row"
      } else if (row.color == '702') {
        return "wait-row"
      } else if (row.color == '999') {
        return 'warning-row';
      }
    },
    keyDown(e) {
      //如果是回车则执行登录方法
      if (e.keyCode == 13) {
        if (this.$route.name == 'userManagement') {
          if (!this.drawer) {
            this.handleSearch();
          }
        }
      }
    },
    handleDate(e) {
      this.$nextTick(() => {
        if (e == null) {
          this.value2 = []
          this.value3 = []
          this.freeUserDate = []
        }
      })
    },
    freeUserConfirm() {
      this.$confirm('是否冻结该锁用户?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        var row = this.freeUserManageRow[0]
        // row.frozenStartTime = moment(this.freeUserDate[0]).format("X")
        // row.frozenEndTime = moment(this.freeUserDate[1]).format("X")
        RequestSet.freeUserManage(1, row, (callback) => {
          if (callback.code == 200) {
            this.$message.success("冻结指令下发成功")
            this.freeUserDialog = false
          } else {
            this.$message.error("冻结指令下发失败")
          }
        })
      })
      return
      if (this.freeUserDate.length != 2) {
        this.$confirm('是否冻结该锁用户?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          var row = this.freeUserManageRow[0]
          row.frozenStartTime = 1676603379//moment(this.freeUserDate[0]).format("X")
          row.frozenEndTime = 1895132615//moment(this.freeUserDate[1]).format("X")
          RequestSet.freeUserManage(1, row, (callback) => {
            if (callback.code == 200) {
              this.$message.success("冻结指令下发成功")
              this.freeUserDialog = false
            } else {
              this.$message.error("冻结指令下发失败")
            }
          })
        })
      } else {
        this.$message.error("请选择开始结束时间")
      }
    },
    // 冻结锁用户
    frozenMethods(index, row) {
      var userRow = row
      var drawerRow = this.drawerRow
      userRow['userId'] = JSON.parse(drawerRow.info).userId || JSON.parse(drawerRow.info).userPassword
      userRow['keyId'] = JSON.parse(drawerRow.info).keyId || JSON.parse(drawerRow.info).userPassword
      userRow['frozenStartTime'] = moment(row.startTime).format("X")
      userRow['frozenEndTime'] = moment(row.endTime).format("X")
      this.freeUserDate = [row.startTime, row.endTime]
      this.freeUserManageRow = [userRow]
      this.freeUserTitle = '冻结锁用户'
      this.frozenDialog = true
      // this.freeUserConfirm()
      // this.batchFreeShow = true
      // this.freeUserDialog = true
    },
    // 冻结用户选择完时间后
    async frozenTimeSureMethods() {
      this.freeUserManageRow.map(li => {
        li.frozenStartTime = moment(this.value2[0]).valueOf() / 1000
        li.frozenEndTime = moment(this.value2[1]).valueOf() / 1000
      })
      await this.freeUserConfirm()
    },
    // 解冻锁用户
    thawMethods(index, row) {
      var userRow = row
      var drawerRow = this.drawerRow
      userRow['userId'] = JSON.parse(drawerRow.info).userId || JSON.parse(drawerRow.info).userPassword
      userRow['keyId'] = JSON.parse(drawerRow.info).keyId || JSON.parse(drawerRow.info).userPassword
      userRow['frozenStartTime'] = 1676603379//moment(row.startTime).format("X")
      userRow['frozenEndTime'] = 1895132615//moment(row.endTime).format("X")
      this.$confirm('是否解冻该锁用户?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        RequestSet.freeUserManage(0, userRow, (callback) => {
          if (callback.code == 200) {
            this.$message.success("解冻指令下发成功")
          } else {
            this.$message.error("解冻指令下发失败")
          }
        })
      })
    },
    // 批量冻结用户
    batchfrozenMethods() {
      this.freeUserTitle = '批量冻结锁用户'
      this.freeUserDate = []
      this.batchFreeUserConfirm()
      // this.batchFreeShow = false
      // this.freeUserDialog = true
    },
    batchFreeUserConfirm() {
      var userRow = this.batchRenewalList
      var drawerRow = this.drawerRow
      this.$confirm('是否冻结这些锁用户?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        userRow.map(li => {
          li['userId'] = JSON.parse(drawerRow.info).userId || JSON.parse(drawerRow.info).userPassword
          li['keyId'] = JSON.parse(drawerRow.info).keyId || JSON.parse(drawerRow.info).userPassword
          li['frozenStartTime'] = 1676603379//moment(this.freeUserDate[0]).format("X")
          li['frozenEndTime'] = 1895132615//moment(this.freeUserDate[1]).format("X")
          RequestSet.freeUserManage(1, li, (callback) => {
            if (callback.code == 200) {
              this.$message.success("冻结指令下发成功")
              this.batchRenewalList = []
              this.freeUserDialog = false
            } else {
              this.$message.error("冻结指令下发失败")
            }
          })
        })
      })
    },
    // 批量解锁用户
    batchthawMethods() {
      var userRow = this.batchRenewalList
      var drawerRow = this.drawerRow
      this.$confirm('是否解冻这些锁用户?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        userRow.map(li => {
          li['userId'] = JSON.parse(drawerRow.info).userId || JSON.parse(drawerRow.info).userPassword
          li['keyId'] = JSON.parse(drawerRow.info).keyId || JSON.parse(drawerRow.info).userPassword
          li['frozenStartTime'] = 1676603379//moment(li.startTime).format("X")
          li['frozenEndTime'] = 1895132615//moment(li.endTime).format("X")
          RequestSet.freeUserManage(0, li, (callback) => {
            if (callback.code == 200) {
              this.$message.success("解冻指令下发成功")
              this.batchRenewalList = []
              this.freeUserDialog = false
            } else {
              this.$message.error("解冻指令下发失败")
            }
          })
        })
      })
    },
    // 获取锁用户总数
    getlockUser() {
      var data = {
        pageNum: 0,
        pageSize: 0,
        q: JSON.stringify({
          type: 26,
          status: 1,
          types: "26"
        }),
        orderBy: "create_at desc",
      };
      httpGet(data, this.$api.getCertificates).then((res) => {
        if (res.code == 200) {
          let data = utils.zlib_unzip(res.data)
          console.log(res)
          // this.total = res.data.total
        }
      })
    },
    // 批量退租
    batchLeaseback() {
      this.$confirm('是否退租?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.batchRenewalList.map((li, index) => {
          this.deleteRoomfun(index, li)
        })
      })
    },
    // 单个续租
    singleRenewalMethods(index, row) {
      this.batchRenewalList = [row]
      this.batchRenewalShow = true
    },
    // 批量续租确认
    batchRenewalMethods() {
      this.$confirm('此操作将延长入住时间, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        if (this.batchRenewalFrom.endTime == '' || this.batchRenewalFrom.startTime == '') {
          this.$message.error("请选择时间范围")
          return
        }
        var drawerRow = this.drawerRow
        this.batchRenewalList.map(li => {
          if (li.manufactureId == 101) {
            var userTelephone = JSON.parse(drawerRow.info).userTelephone;
            var userPassword = JSON.parse(drawerRow.info).userPassword;
            var endTime = new Date(this.batchRenewalFrom.endTime).getTime()
            var startTime = new Date(this.batchRenewalFrom.startTime).getTime()
            var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
            var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
            var data = {
              deviceNum: li.deviceNum,
              imei: li.imei,
              userTelephone: userTelephone,
              userPassword: userPassword,
              password: userPassword,
              operateMode: 2,
              order: 6202,
              passwordStartTime: passwordStartTime,
              passwordEndTime: passwordEndTime,
              cardName: drawerRow.name,
              roomName: li.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) => {
                  if (callback.success) {
                    var data = {
                      pageNum: 0,
                      pageSize: 0,
                      orderBy: "create_at desc",
                      q: {
                        cardId: drawerRow.id,
                        deviceNum: li.deviceNum,
                        types: "0,1,2,3,4",
                        inStatus: "0,1"
                      },
                    };
                    var unbind = {
                      id: li.id,
                      startTime: this.batchRenewalFrom.startTime,
                      endTime: this.batchRenewalFrom.endTime
                    };
                    httpPost(unbind, this.$api.setTenant).then((res) => {

                    })
                    httpGet(data, this.$api.getCertificates).then((res) => {
                      let data = utils.zlib_unzip(res.data)
                      data.map(lt => {
                        utils.modifyPutCarfid(li, lt, startTime, endTime)
                      })
                    })
                    this.batchRenewalShow = false
                  } else {
                    this.$message.error("修改失败")
                  }
                })
          } else if (li.manufactureId == 201 || li.manufactureId == 221) {
            var endTime = new Date(this.batchRenewalFrom.endTime).getTime()
            var startTime = new Date(this.batchRenewalFrom.startTime).getTime()
            var unbind = [{
              cardId: drawerRow.id,
              siteId: li.roomId,
            }];
            httpPost(unbind, this.$api.unbindCard).then((res) => {
              var data1 = [{
                cardId: drawerRow.id,
                siteId: li.roomId,
                startTime: this.batchRenewalFrom.startTime,
                endTime: this.batchRenewalFrom.endTime
              }];
              httpPost(data1, this.$api.bindCard).then((res) => {
                this.operation(0, this.drawerRow)
              });
            })
            var data = {
              pageNum: 0,
              pageSize: 0,
              orderBy: "create_at desc",
              q: {
                cardId: drawerRow.id,
                deviceNum: li.deviceNum,
                types: "0,1,2,3,4",
                inStatus: "0,1"
              },
            };
            httpGet(data, this.$api.getCertificates).then((res) => {
              let data = utils.zlib_unzip(res.data)
              data.map(lt => {
                utils.modifyPutCarfidzg(li, lt, startTime, endTime)
              })
            })
            this.batchRenewalShow = false
          } else {
            this.$message.error("暂未发现对应设备")
          }
        })
      })
    },

    batchRenewal() {
      this.batchRenewalShow = true
    },
    // 批量选择续租
    renewalOption(val) {
      this.batchRenewalList = val
    },
    batchProcessingData() {
      var data = {
        pageNum: 0,
        pageSize: 0,
        orderBy: "create_time desc"
      };
      // httpPost(data, this.$api.getlistNum).then((res1) => {
      this.multipleSelection.map(li => {
        this.GetCredentialList(li)
      })
      // })
    },
    GetCredentialList(item) {
      RequestSet.GetCredentialList(item, 1, (callback) => {
        let dataOne = utils.zlib_unzip(callback.data)
        if (dataOne.length > 0) {
          dataOne.map(li => {
            li['fingerprint'] = JSON.parse(li.content).fingerprint
          })
          var arr = utils.uniqueArray(dataOne, "fingerprint");
          arr.map((li, index) => {
            RequestSet.completePersonnelVouchers(li, index, 1)
          })
        }
      })
      RequestSet.GetCredentialList(item, 2, (callback) => {
        let dataOne = utils.zlib_unzip(callback.data)
        if (dataOne.length > 0) {
          dataOne.map(li => {
            li['password'] = JSON.parse(li.content).password
          })
          var arr = utils.uniqueArray(dataOne, "password");
          arr.map((li, index) => {
            RequestSet.completePersonnelVouchers(li, index, 2)
          })
        }
      })
      RequestSet.GetCredentialList(item, 3, (callback) => {
        let dataOne = utils.zlib_unzip(callback.data)
        if (dataOne.length > 0) {
          dataOne.map(li => {
            li['password'] = JSON.parse(li.content).password
          })
          var arr = utils.uniqueArray(dataOne, "password");
          arr.map((li, index) => {
            RequestSet.completePersonnelVouchers(li, index, 3)
          })
        }
      })
      RequestSet.GetCredentialList(item, 4, (callback) => {
        let dataOne = utils.zlib_unzip(callback.data)
        if (dataOne.length > 0) {
          dataOne.map(li => {
            li['password'] = JSON.parse(li.content).password
          })
          var arr = utils.uniqueArray(dataOne, "password");
          arr.map((li, index) => {
            RequestSet.completePersonnelVouchers(li, index, 4)
          })
        }
      })
    },
    // 凭证避免重复
    avoidRepetition(e, type) {
      var person = this.drawerRow
      if (type == 12) {
        this.roomtable1.map(li => {
          var content = JSON.parse(li.content)
          if (li.cardId == person.id && content.password == e && li.type == 12) {
            this.$message.error("该身份证已存在")
            this.voucher.idcard = ''
          }
        })
      } else if (type == 13) {
        this.roomtable1.map(li => {
          var content = JSON.parse(li.content)
          if (li.cardId == person.id && content.password == e && li.type == 13) {
            this.$message.error("该NFC已存在")
            this.voucher.nfc = ''
          }
        })
      } else if (type == 14) {
        this.roomtable1.map(li => {
          var content = JSON.parse(li.content)
          if (li.cardId == person.id && content.password == e && li.type == 14) {
            this.$message.error("该密码已存在")
            this.voucher.password = ''
          }
        })
      }
    },
    // 指纹别名
    fingerprintAliasMethod(e) {
      var person = this.drawerRow
      this.roomtable1.map(li => {
        var content = JSON.parse(li.content)
        if (li.cardId == person.id && content.fingerprintAlias == e && li.type == 11) {
          this.$message.error("该指纹已存在")
          this.voucher.fingerprintAlias = ''
        }
      })
    },
    // 删除平台记录
    deleteCertificatesMethod(index, row) {
      this.$confirm("确定要删除平台记录吗？", "提示", {
        type: "warning",
      }).then(() => {
        var data = {
          ids: [row.id],
        };
        httpPost(data, this.$api.deleteCertificates).then((
          res) => {
          if (res.success) {
            this.$message.success("删除成功！");
            this.getcertificate();
            this.obtainVoucherIssuanceRecord();
          }
        });
      })
    },
    // 记录筛选条件重置
    recordFilterConditionReset() {
      this.recordFilterCondition = {
        imei: '',
        deviceNum: '',
        status: '',
        type: '',
        roomId: ''
      }
    },
    // 查看下发记录
    viewDistributionRecord(index, row) {
      this.activeName = 2
      this.viewRecordSelected = row
      this.obtainVoucherIssuanceRecord()
    },
    deleteCertificateMethod(index, row) {
      this.$confirm("此操作将删除锁上凭证，请确认！", "提示", {
        type: "warning",
      }).then(() => {
        this.deleteLockedCredential(index, row)
      }).catch(() => {

      })
    },
    // 删除锁上凭证
    deleteLockedCredential(index, row) {
      var ids = this.roomtable;
      var that = this;
      var str = {};
      var q = {
        deviceNum: row.deviceNum,
        imei: row.imei,
        lockType: 1
      };
      var data = {
        q: JSON.stringify(q),
        pageNum: 1,
        pageSize: 10,
      };
      httpPost(data, this.$api.getDeviceItems).then((res) => {
        if (res.data.list.length > 0) {
          var cardName = row.name + '-' + JSON.parse(row.content).pzname
          if (res.data.list[0].manufactureId == 201 || res.data.list[0].manufactureId == 221) {
            if (row.type == 1) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  ICINLocker.delFingerPrints(row.deviceNum, row.imei,
                    JSON.parse(row.content).userPassword, 2, data[0].face, 0,
                    row.startTime, row.endTime, cardName, res
                      .data.list[0].roomName, (callback) => {
                        if (callback.success) {
                          var content = JSON.parse(row.content)
                          content.operateMode = 18
                          var updatedata = {
                            id: row.id,
                            status: 0,
                            content: JSON.stringify(content),
                            serial: callback.data.serialNumber,
                          };
                          httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                          });
                          that.$message.success("下发成功");
                          that.obtainVoucherIssuanceRecord();
                        } else {
                          that.$message.error(callback.msg)
                        }
                      })
                } else {
                  that.$message.error("删除失败！");
                }
              })
            } else if (row.type == 2) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  ICINLocker.delCardRegister(row.deviceNum, row.imei,
                    JSON.parse(row.content).userPassword, 2, 1,
                    JSON.parse(row.content).password, 36, row
                    .startTime, row.endTime, 6215, data[0]
                    .face, cardName, res.data.list[0].roomName, (
                      callback) => {
                    if (callback.success) {
                      var content = JSON.parse(row.content)
                      content.operateMode = 15
                      var updatedata = {
                        id: row.id,
                        status: 0,
                        content: JSON.stringify(content),
                        serial: callback.data.serialNumber,
                      };
                      httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                      });
                      that.$message.success("下发成功");
                      that.obtainVoucherIssuanceRecord();
                    } else {
                      that.$message.error(callback.msg)
                    }
                  })
                } else {
                  that.$message.error("删除失败！");
                }
              })
            } else if (row.type == 3) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  ICINLocker.delCardRegister(row.deviceNum, row.imei,
                    JSON.parse(row.content).userPassword, 2, 1,
                    JSON.parse(row.content).password, 50, row
                    .startTime, row.endTime, 6212, data[0]
                    .face, cardName, res.data.list[0].roomName, (
                      callback) => {
                    if (callback.success) {
                      var content = JSON.parse(row.content)
                      content.operateMode = 12
                      var updatedata = {
                        id: row.id,
                        status: 0,
                        content: JSON.stringify(content),
                        serial: callback.data.serialNumber,
                      };
                      httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                      });
                      that.$message.success("下发成功");
                      that.obtainVoucherIssuanceRecord();
                    } else {
                      that.$message.error(callback.msg)
                    }
                  })
                } else {
                  that.$message.error("删除失败！");
                }
              })
            } else if (row.type == 4) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  ICINLocker.delForeverPassword(row.deviceNum, row.imei,
                    JSON.parse(row.content).userPassword, 2, JSON
                      .parse(row.content).password, 255, row
                    .startTime, row.endTime, 6209, data[0].face, cardName, res
                      .data.list[0].roomName, (
                        callback) => {
                    if (callback.success) {
                      var content = JSON.parse(row.content)
                      content.operateMode = 9
                      var updatedata = {
                        id: row.id,
                        status: 0,
                        content: JSON.stringify(content),
                        serial: callback.data.serialNumber,
                      };
                      httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                      });
                      that.$message.success("下发成功");
                      that.obtainVoucherIssuanceRecord();
                    } else {
                      that.$message.error(callback.msg)
                    }
                  })
                } else {
                  that.$message.error("删除失败")
                }
              })
            }
          } else if (res.data.list[0].manufactureId == 101) {
            if (row.type == 1) {
              this.getfiId(row, function (data) {
                if (data.length > 0) {
                  var fpid = "";
                  if (data[0].face) {
                    fpid = data[0].face.toString(16);
                    if (fpid.length != 2) {
                      fpid = "0" + fpid;
                    }
                  } else {
                    if (data[0].face == 0) {
                      fpid = data[0].face.toString(16);
                      fpid = "0" + fpid;
                    }
                  }
                  str = {
                    imei: row.imei,
                    deviceNum: row.deviceNum,
                    userTelephone: JSON.parse(row.content).userTelephone,
                    operateMode: 18,
                    order: 6218,
                    password: fpid,
                    userPassword: JSON.parse(row.content).userPassword,
                    is: false,
                    passwordStartTime: JSON.parse(row.content)
                      .passwordStartTime,
                    passwordEndTime: JSON.parse(row.content).passwordEndTime,
                    cardName: cardName,
                    roomName: res.data.list[0].roomName
                  };
                  if (JSON.parse(row.content).pass) {
                    str['pass'] = true
                  } else {
                    str['pass'] = false
                  }
                  httpPost(str, that.$api.getDeviceOperateUserInfo).then(
                    (res1) => {
                      if (res1.success) {
                        var content = JSON.parse(row.content)
                        content.operateMode = 18
                        var updatedata = {
                          id: row.id,
                          status: 0,
                          content: JSON.stringify(content),
                          serial: res1.data.serialNumber,
                        };
                        httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                        });
                        that.$message.success("下发成功");
                        that.obtainVoucherIssuanceRecord();
                      } else {
                        that.$message.error("删除失败！")
                      }
                    });
                } else {
                  that.$message.error("删除失败！")
                }
              });
              return false;
            } else if (row.type == 2) {
              str = {
                imei: row.imei,
                deviceNum: row.deviceNum,
                userTelephone: JSON.parse(row.content).userTelephone,
                operateMode: 15,
                order: 6215,
                password: JSON.parse(row.content).password,
                userPassword: JSON.parse(row.content).userPassword,
                is: false,
                passwordStartTime: JSON.parse(row.content).passwordStartTime,
                passwordEndTime: JSON.parse(row.content).passwordEndTime,
                cardName: cardName,
                roomName: res.data.list[0].roomName
              };
            } else if (row.type == 3) {
              str = {
                imei: row.imei,
                deviceNum: row.deviceNum,
                userTelephone: JSON.parse(row.content).userTelephone,
                operateMode: 12,
                order: 6212,
                password: JSON.parse(row.content).password,
                userPassword: JSON.parse(row.content).userPassword,
                is: false,
                passwordStartTime: JSON.parse(row.content).passwordStartTime,
                passwordEndTime: JSON.parse(row.content).passwordEndTime,
                cardName: cardName,
                roomName: res.data.list[0].roomName
              };
            } else if (row.type == 4) {
              str = {
                imei: row.imei,
                deviceNum: row.deviceNum,
                userTelephone: JSON.parse(row.content).userTelephone,
                operateMode: 9,
                order: 6209,
                userPassword: JSON.parse(row.content).userPassword,
                password: JSON.parse(row.content).password,
                is: false,
                passwordStartTime: JSON.parse(row.content).passwordStartTime,
                passwordEndTime: JSON.parse(row.content).passwordEndTime,
                cardName: cardName,
                roomName: res.data.list[0].roomName
              };
            }
            if (JSON.parse(row.content).pass) {
              str['pass'] = true
            } else {
              str['pass'] = false
            }
            httpPost(str, this.$api.getDeviceOperateUserInfo).then((res1) => {
              if (res1.success) {
                var content = JSON.parse(row.content)
                content.operateMode = str.operateMode
                var updatedata = {
                  id: row.id,
                  status: 0,
                  content: JSON.stringify(content),
                  serial: res1.data.serialNumber,
                };
                httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                });
                that.$message.success("下发成功");
                that.obtainVoucherIssuanceRecord();
              } else {
                that.$message.error("删除失败！")
              }
            });
          } else if (res.data.list[0].manufactureId == 1201) {
            if (row.type == 1) {

            } else if (row.type == 4) {
              let data = {
                code: "lwj/passwordOperate",
                data: {
                  lockerId: row.deviceNum,
                  lockerUserId: JSON.parse(row.content).userPassword,
                  action: 2,
                  password: JSON.parse(row.content).password,
                  startTime: row.startTime,
                  endTime: row.endTime,
                  operateMode: 9,
                  order: 6209,
                  cardName: cardName,
                  roomName: res.data.list[0].roomName
                }
              }
              httpPost(data, this.$api.sendCommand).then(res => {
                if (res.success) {
                  let content = JSON.parse(row.content)
                  content.operateMode = 9
                  let updatedata = {
                    id: row.id,
                    status: 0,
                    content: JSON.stringify(content),
                    serial: res.data.serialNumber,
                  };
                  httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                  });
                } else {
                  this.$message.error(res.msg)
                }
              })
            }
          }
        } else {
          this.$message.error("未找到对应设备")
        }
      })
    },
    // 获取凭证下发记录
    obtainVoucherIssuanceRecord() {
      var AboutDevice = this.$store.state.roomAbout
      var password = JSON.parse(this.viewRecordSelected.content).password || ''
      var type = ''
      if (this.viewRecordSelected.type == 11) {
        type = 1
      } else if (this.viewRecordSelected.type == 12) {
        type = 2
      } else if (this.viewRecordSelected.type == 13) {
        type = 3
      } else if (this.viewRecordSelected.type == 14) {
        type = 4
      }
      if (this.recordFilterCondition.roomId) {
        var t = {
          roomIds: [this.recordFilterCondition.roomId],
          lockType: 1
        };
        var data = {
          q: JSON.stringify(t),
        };
        httpPost(data, this.$api.getDeviceItems).then((res) => {
          if (res.success) {
            var status = ''
            if (this.recordFilterCondition.status == '') {
              status = "0,1,702"
            } else {
              status = this.recordFilterCondition.status
            }
            if (res.data.list.length > 0) {
              if (this.viewRecordSelected.type == 13 && (res.data.list[0].manufactureId == 201 || res.data.list[0].manufactureId == 221)) {
                password = utils.cardFormatConversion(password)
              }
            }
            var data6 = {
              pageNum: this.currentPage1,
              pageSize: this.pageSize1,
              orderBy: "create_at desc",
              q: JSON.stringify({
                info: {
                  password: password
                },
                cardId: this.drawerRow.id,
                deviceNum: res.data.list[0].deviceNum,
                imei: this.recordFilterCondition.imei,
                types: type || '0,1,2,3,4',
                inStatus: status
              }),
            };
            httpGet(data6, this.$api.getCertificates).then((res) => {
              console.log("123123", res)
              if (res.success) {
                var certiflist = utils.zlib_unzip(res.data)
                console.log(certiflist)
                certiflist.map((li) => {
                  li.createAt = this.time(+new Date(li.createAt))
                  li['userTelephone'] = JSON.parse(li.content).userTelephone
                  li['operateMode'] = JSON.parse(li.content).operateMode
                  if (JSON.parse(li.content).fingerprintAlias) {
                    li.pzname = JSON.parse(li.content).pzname + "-" + JSON.parse(li.content)
                      .fingerprintAlias
                  } else {
                    li.pzname = JSON.parse(li.content).pzname
                  }
                  li['statusText'] = utils.statusCode(li.status)
                  var operateMode = JSON.parse(li.content).operateMode
                  if (li.status == 0) {
                    if (operateMode == 18 || operateMode == 15 || operateMode == 12 || operateMode == 9) {
                      li['statusText'] = '删除中'
                    } else if (operateMode == 17 || operateMode == 14 || operateMode == 11 ||
                      operateMode == 8) {
                      li['statusText'] = '修改中'
                    }
                  } else if (li.status == 702) {
                    if (operateMode == 18 || operateMode == 15 || operateMode == 12 || operateMode == 9) {
                      li['statusText'] = '删除失败'
                    } else if (operateMode == 17 || operateMode == 14 || operateMode == 11 ||
                      operateMode == 8) {
                      li['statusText'] = '修改失败'
                    }
                  }
                  li.password = JSON.parse(li.content).password
                  li['startTimeText'] = utils.formatTime(li.startTime)
                  li['endTimeText'] = utils.formatTime(li.endTime)
                  li['data'] = JSON.parse(li.content).password
                  if (li.type == 1) {
                    li['data'] = li.id
                  }
                  var resultArr = AboutDevice.filter(
                    (_item) => _item.imei == li.imei
                  )[0];
                  if (resultArr) {
                    li.roomId = resultArr.id;
                    li.roomName = resultArr.roomName;
                  } else {
                    li.roomId = "";
                    li.roomName = JSON.parse(li.content).roomName || "";
                  }
                });
                this.sendListRecords = certiflist
                this.total1 = res.data.total
              } else {
                this.$message.error("获取失败")
              }
            })
          } else {
            this.$message.error("获取房间对应门锁信息失败")
          }
        })
      } else {
        var status = ''
        if (this.recordFilterCondition.status == '') {
          status = "0,1,702"
        } else {
          status = this.recordFilterCondition.status
        }
        var data6 = {}
        if (this.viewRecordSelected.type == 11) {
          password = utils.cardFormatConversion(password)
          data6 = {
            pageNum: this.currentPage1,
            pageSize: this.pageSize1,
            orderBy: "create_at desc",
            q: JSON.stringify({
              cardId: this.drawerRow.id,
              info: {
                pzname: JSON.parse(this.viewRecordSelected.content).pzname
              },
              deviceNum: this.recordFilterCondition.deviceNum,
              types: '0,1,2,3,4',
              imei: this.recordFilterCondition.imei,
              inStatus: status,
              type: type,
            }),
          };
        } else if (this.viewRecordSelected.type == 13) {
          password = utils.cardFormatConversion(password)
          data6 = {
            pageNum: this.currentPage1,
            pageSize: this.pageSize1,
            orderBy: "create_at desc",
            q: JSON.stringify({
              cardId: this.drawerRow.id,
              info: {
                pzname: JSON.parse(this.viewRecordSelected.content).pzname
              },
              deviceNum: this.recordFilterCondition.deviceNum,
              types: type || '0,1,2,3,4',
              imei: this.recordFilterCondition.imei,
              inStatus: status,
            }),
          };
        } else {
          data6 = {
            pageNum: this.currentPage1,
            pageSize: this.pageSize1,
            orderBy: "create_at desc",
            q: JSON.stringify({
              cardId: this.drawerRow.id,
              info: {
                password: password
              },
              deviceNum: this.recordFilterCondition.deviceNum,
              types: type || '0,1,2,3,4',
              imei: this.recordFilterCondition.imei,
              inStatus: status,
            }),
          };
        }
        httpGet(data6, this.$api.getCertificates).then((res) => {
          if (res.success) {
            var certiflist = utils.zlib_unzip(res.data)
            certiflist.map((li) => {
              li.createAt = this.time(+new Date(li.createAt))
              li['userTelephone'] = JSON.parse(li.content).userTelephone
              li['operateMode'] = JSON.parse(li.content).operateMode
              var operateMode = JSON.parse(li.content).operateMode
              li['statusText'] = utils.statusCode(li.status)
              if (li.status == 0) {
                if (operateMode == 18 || operateMode == 15 || operateMode == 12 || operateMode == 9) {
                  li['statusText'] = '删除中'
                } else if (operateMode == 17 || operateMode == 14 || operateMode == 11 || operateMode == 8) {
                  li['statusText'] = '修改中'
                }
              } else if (li.status == 702) {
                if (operateMode == 18 || operateMode == 15 || operateMode == 12 || operateMode == 9) {
                  li['statusText'] = '删除失败'
                } else if (operateMode == 17 || operateMode == 14 || operateMode == 11 || operateMode == 8) {
                  li['statusText'] = '修改失败'
                }
              } else if (li.status == 1) {
                if (operateMode == 18 || operateMode == 15 || operateMode == 12 || operateMode == 9) {
                  li['statusText'] = '删除成功'
                } else if (operateMode == 17 || operateMode == 14 || operateMode == 11 || operateMode == 8) {
                  li['statusText'] = '修改成功'
                }
              }
              if (JSON.parse(li.content).fingerprintAlias) {
                li.pzname = JSON.parse(li.content).pzname + "-" + JSON.parse(li.content).fingerprintAlias
              } else {
                li.pzname = JSON.parse(li.content).pzname
              }
              li.password = JSON.parse(li.content).password
              li['startTimeText'] = utils.formatTime(li.startTime)
              li['endTimeText'] = utils.formatTime(li.endTime)
              li['data'] = JSON.parse(li.content).password
              if (li.type == 1) {
                li['data'] = li.id
              }
              var resultArr = AboutDevice.filter(
                (_item) => _item.imei == li.imei
              )[0];
              if (resultArr) {
                li.roomId = resultArr.id;
                li.roomName = resultArr.roomName;
              } else {
                li.roomId = "";
                li.roomName = JSON.parse(li.content).roomName || "";
              }
            });
            this.sendListRecords = certiflist
            this.total1 = res.data.total
          } else {
            this.$message.error("获取失败")
          }
        })
      }
    },
    // 导出
    exportfun() {
      var q = {
        type: "0",
      };
      var data = {
        q: JSON.stringify(q),
        fileName: "租客信息",
      };
      download(data, this.$api.exportCard).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);
      });
    },
    // 删除所有对应人员凭证
    dellAllCertificate(row) {
      var data6 = {
        pageNum: 0,
        pageSize: 0,
        orderBy: "create_at desc",
        q: {
          cardId: row.id,
        },
      };
      httpGet(data6, this.$api.getCertificates).then((res6) => {
        if (res6.success) {
          var ids = []
          let data = utils.zlib_unzip(res6.data)
          data.map(li => {
            ids.push(li.id)
          })
          if (ids.length > 0) {
            var data7 = {
              ids: ids,
            };
            httpPost(data7, this.$api.deleteCertificates).then((res7) => {
              if (res7.success) {
                this.$message.success("成功删除人员对应凭证")
              } else {
                this.$message.error("删除人员对应凭证失败")
              }
            });
          }
        } else {
          this.$message.error("删除人员对应凭证失败")
        }
      })
    },
    // 删除用户
    deleteUser(row, roomtable) {
      var selectkey = roomtable;
      console.log()
      if (selectkey.length > 0) {
        selectkey.forEach((li, index) => {
          var resultArr = this.AboutDevice.filter(
            (_item) => _item.roomId == li
          )[0];
          if (resultArr) {
            if (resultArr.imei) {
              var roomName = this.zNodes.filter(item => li === item.id)
              if (resultArr.manufactureId == 201 || resultArr.manufactureId == 221) {
                var data = {
                  lockerId: resultArr.deviceNum,
                  imei: resultArr.imei,
                  lockerUserId: JSON.parse(row.info).userPassword,
                  keyId: JSON.parse(row.info).userPassword,
                  role: 0,
                  action: 2, //1--添加、2--删除、3--修改
                  order: 6203,
                  cardName: row.name,
                  roomName: roomName[0].name
                }
                ICINLocker.addUserToLock(data.lockerId, data.imei, data.lockerUserId, data
                  .role, data.action, data
                  .order, data.cardName, data.roomName, (callback) => {
                    if (callback.success) {
                      this.$message.success('下发成功')
                      this.dellAllCertificate(row)
                    } else {
                      this.$message.error(callback.msg)
                    }
                  })
              } else if (resultArr.manufactureId == 101) {
                var str1 = {
                  imei: resultArr.imei,
                  deviceNum: resultArr.deviceNum,
                  userTelephone: JSON.parse(row.info).userTelephone,
                  userPassword: JSON.parse(row.info).userPassword,
                  cardName: row.name,
                  roomName: roomName[0].name
                };
                ICINLocker.LDDeleteUser(str1.deviceNum, str1.imei, str1.userTelephone, str1
                  .userPassword, str1.cardName, str1.roomName, (callback) => {
                    if (callback.success) {
                      this.$message.success('下发成功')
                      this.dellAllCertificate(row)
                    } else {
                      this.$message.error(callback.msg)
                    }
                  })
              }
            }
          } else {
            this.dellAllCertificate(row)
          }
        });
      } else {
        this.dellAllCertificate(row)
      }
    },
    // 多个删除
    selectmoredel() {
      var list = this.multipleSelection;
      var idlist = [];
      var that = this;
      if (list.length == 0) {
        this.$message.error("请勾选需要删除的数据");
      } else {
        this.$confirm("确定要删除吗？", "提示", {
          type: "warning",
        }).then(() => {
          list.map((row) => {
            var unbindCarddata = [];
            this.screenRoom1(row.id, function (roomtable) {
              var arr = []
              roomtable.map((li) => {
                var data = {
                  siteId: li.roomId,
                  cardId: row.id
                };
                arr.push(li.roomId)
                unbindCarddata.push(data);
              });
              httpPost(unbindCarddata, that.$api.unbindCard).then((res) => {
                var data = {
                  ids: [row.id]
                };
                httpPost(data, that.$api.deleteCard).then((res) => {
                  if (res.success) {
                    that.$message.success("删除成功");
                    that.deleteUser(row, arr);
                    that.getlist();
                  } else {
                    that.$message.error("删除失败");
                  }
                });
              });
            })
          });
        });
      }
    },
    // 触发搜索按钮
    handleSearch() {
      var q = {
        // type: 0,
        name: this.query.name,
        number: this.query.number,
        phone: this.query.phone,
      };
      var data = {
        pageNum: 1,
        pageSize: 10,
        orderBy: "create_time desc",
        q: JSON.stringify(q),
      };
      this.currentPage4 = 1
      let roomAbout = this.$store.state.roomAbout
      httpPost(data, this.$api.getlistNum).then((res1) => {
        console.log(res1);
        let para = [];
        res1.data.list.map((li, index) => {
          let userTelephone = JSON.parse(li.info) ? JSON.parse(li.info).userTelephone : ''
          let str = {
            imei: li.imei,
            userTelephone: userTelephone,
            password: "",
            operateMode: 1,
          };
          para.push(str);
          this.$store.commit("increment", 1);
          li.status = 3;
          li['rommNameText'] = this.screenRoomName(li.id)
        });
        // this.getallstatus(para);
        console.log(res1.data.list);
        this.userlist = res1.data.list;
        this.total = res1.data.total;
      });
    },
    // 获取人员列表
    getlist() {
      var q = {
        // type: 0,
      };
      var data = {
        pageNum: this.currentPage4,
        pageSize: this.pageSize,
        orderBy: "create_time desc",
        q: JSON.stringify(q),
      };
      httpPost(data, this.$api.getlistNum).then((res1) => {
        console.log(res1)
        // res1.data.list.map((li, index) => {
        //   li['rommNameText'] = this.screenRoomName(li.id)
        // });
        let para = [];
        res1.data.list.map((li, index) => {
          let userTelephone = JSON.parse(li.info) ? JSON.parse(li.info).userTelephone : ''
          let str = {
            imei: li.imei,
            userTelephone: userTelephone,
            password: "",
            operateMode: 1,
          };
          para.push(str);
          this.$store.commit("increment", 1);
          li.status = 3;
          li['rommNameText'] = this.screenRoomName(li.id)
        });
        this.userlist = res1.data.list;
        this.total = res1.data.total;
      });
    },

    screenRoomName(id) {
      let roomAbout = this.$store.state.roomAbout
      var arr = ''
      roomAbout.map(lt => {
        if (id == lt.cardId) {
          var name = utils.findIndexArray(this.roomlistZNodes, lt.roomId, [])
          if (name) {
            var path = name.join('/')
            arr += path + '、'
          }
        }
      })
      return arr
    },
    // 查询和人员相关的房间
    getAboutRoom() {
      let data = {
        orderBy: "create_time desc",
        pageNum: 0,
        pageSize: 0,
        q: JSON.stringify({
          name: '',
          number: '',
          cardId: ''
        })
      }
      let data1 = []
      httpPost(data, this.$api.getlistNum).then((res) => {
        console.log("123", res);
        if (res.success) {
          res.data.list.map(li => {
            data1.push(li.id)
          })
          let data2 = {
            cardIds: data1
          }
          httpPost(data2, this.$api.onlyTenant).then((res1) => {
            console.log(res1);
            this.$store.commit("getAboutRoom", res1.data.list);
            this.getlist();
          });
        }
      })
    },
    getEnterprise() {
      httpGet("", this.$api.getEnterprise).then((res) => {
        res.data.list.map(li => {
          li['pid'] = li.parentId
          li['label'] = li.name
          li['value'] = li.id
        })
        var array = utils.uniqueArray(res.data.list, "id");
        var roomlistZNodes = ztreeToElementTree2(array, []);
        this.enterpriseListOption = roomlistZNodes
        this.enterpriselist = res.data.list
      });
    },
    // 获取绑定所有房间
    getalllist() {
      var data = {};
      httpGet(data, this.$api.getSiteList).then((res) => {
        this.zNodes = JSON.parse(JSON.stringify(res.data.list.list));
        var zNodes = JSON.parse(JSON.stringify(res.data.list.list));
        var array = utils.uniqueArray(zNodes, "id");
        this.roomlistZNodes = ztreeToElementTree2(array, []);
      });
    },
    // 获取卡统计
    getcardstatus() {
      var data = {
        cardState: 0,
      };
      httpPost(data, this.$api.countStatus).then((res) => {
        res.data.map((li) => {
          if (li.value == 1) {
            this.normal = li.total;
          } else if (li.value == 2) {
            this.lose = li.total;
          } else if (li.value == 3) {
            this.frozen = li.total;
          }
        });
      });
    },
    // 查询和房间相关的设备
    getAboutDevice() {
      let data = {
        orderBy: "create_time desc",
        pageNum: 0,
        pageSize: 0,
        q: JSON.stringify({
          name: '',
          number: '',
          cardId: ''
        })
      }
      let data1 = []
      httpPost(data, this.$api.getlistNum).then((res) => {
        console.log(res);
        if (res.success) {
          res.data.list.map(li => {
            data1.push(li.id)
          })
          let data2 = {
            cardIds: data1
          }
          httpPost(data2, this.$api.onlyTenant).then((res1) => {
            // this.$store.commit("getAboutRoom", res.data.list);
            // this.getlist();
            let data3 = []
            if (res1.success) {
              res1.data.list.map(li => {
                data3.push(li.roomId)
              })
              let data4 = {
                ids: data3
              }
              httpPost(data4, this.$api.onlySiteDevice).then((res) => {
                this.AboutDevice = res.data.list;
                this.$store.commit("getAboutDevice", res.data.list);
              });
            }
          });
        }
      })
    },


    credentialSearchReset() {
      this.credentialSearch = {
        deviceNum: '',
        imei: '',
        status: '',
        roomId: '',
        type: ''
      }
    },
    selectTenantId(e) {
      localStorage.setItem('tenantId', e)
      this.reload()
    },
    // 续住保存
    continuationManagementSave() {
      console.log(this.roomtable, this.drawerRow)
      this.$confirm("是否续住", "提示", {
        type: "warning",
      }).then(() => {
        if (this.continuationManagementDate.time == '') {
          this.$message.error("请选择时间范围")
          return
        }
        var endTime = new Date(this.continuationManagementDate.time[1]).getTime()
        var startTime = new Date(this.continuationManagementDate.time[0]).getTime()
        var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
        var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
        this.roomtable.map(li => {
          var resultArr = this.AboutDevice.filter(
            (_item) => _item.roomId == li.roomId
          )[0];
          var roomName = this.zNodes.filter(item => li.roomId === item.id)
          if (resultArr) {
            if (resultArr.manufactureId == 101) {
              var userTelephone = JSON.parse(this.drawerRow.info).userTelephone;
              var userPassword = JSON.parse(this.drawerRow.info).userPassword;
              resultArr.roomName = roomName[0].name
              var data = {
                deviceNum: resultArr.deviceNum,
                imei: resultArr.imei,
                userTelephone: userTelephone,
                userPassword: userPassword,
                password: userPassword,
                operateMode: 2,
                order: 6202,
                passwordStartTime: passwordStartTime,
                passwordEndTime: passwordEndTime,
                cardName: this.drawerRow.name,
                roomName: resultArr.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) => {
                  if (callback.success) {
                    var data = {
                      pageNum: 0,
                      pageSize: 0,
                      orderBy: "create_at desc",
                      q: {
                        cardId: this.drawerRow.id,
                        deviceNum: resultArr.deviceNum
                      },
                    };
                    var unbind = [{
                      siteId: this.drawerRow.id,
                      cardId: resultArr.roomId
                    }];
                    httpPost(unbind, this.$api.unbindCard).then((res) => {
                      var data1 = [{
                        cardId: this.drawerRow.id,
                        siteId: resultArr.roomId,
                        startTime: this
                          .continuationManagementDate
                          .time[0],
                        endTime: this
                          .continuationManagementDate
                          .time[1]
                      }];
                      httpPost(data1, this.$api.bindCard).then((
                        res) => {
                      });
                    })
                    httpGet(data, this.$api.getCertificates).then((res) => {
                      let data = utils.zlib_unzip(res.data)
                      data.map(lt => {
                        utils.putCarfid(resultArr, lt,
                          endTime, startTime)
                      })
                    })
                  } else {
                    this.$message.error("修改失败")
                  }
                })
            } else if (resultArr.manufactureId == 201 || resultArr.manufactureId == 221) {
              resultArr.roomName = roomName[0].name
              var unbind = [{
                siteId: this.drawerRow.id,
                cardId: resultArr.roomId
              }];
              httpPost(unbind, this.$api.unbindCard).then((res) => {
                var data1 = [{
                  cardId: this.drawerRow.id,
                  siteId: resultArr.roomId,
                  startTime: this.continuationManagementDate.time[0],
                  endTime: this.continuationManagementDate.time[1]
                }];
                httpPost(data1, this.$api.bindCard).then((res) => {
                });
              })
              var data = {
                pageNum: 0,
                pageSize: 0,
                orderBy: "create_at desc",
                q: {
                  cardId: this.drawerRow.id,
                  deviceNum: resultArr.deviceNum
                },
              };
              httpGet(data, this.$api.getCertificates).then((res) => {
                let data = utils.zlib_unzip(res.data)
                data.map(lt => {
                  utils.putCarfidzg(resultArr, lt, endTime,
                    startTime)
                })
              })
            }
          }
        })
      })
    },
    // 续住返回
    continuationManagementBack() {
      this.activeName = 1
      this.roomstatus1 = true;
    },
    // 续住管理
    continuationManagement(index, row) {
      this.activeName = index;
      this.drawerRow = row;
      this.voucher.username = row.name;
      this.personname = row.name
      this.getAboutDevice1();
      this.screenRoom(row.id); //根据id筛选有关房源
      this.getItems(row.siteId);
      // this.getOperates(row.id);
      this.getcertificate();

      this.drawer = true
      this.activeName = 2;
    },
    // 选择房间跳转下发凭证
    issueVoucher() {
      this.activeName = 1;
    },
    addBindRoom() {
      this.activeName = 0;
    },
    // 房源搜索
    searchTable() {
      this.roomtable.map(li => {

      })
    },
    // 选择房源，下发凭证
    sendVoucher() {
      var SelectedListbind = this.SelectedList
      var roomAbout = this.$store.state.roomAbout
      var infostr = JSON.parse(this.drawerRow.info);
      var fjid = [];
      if (this.value2[0] == '' || this.value2[1] == '') {
        this.$message.error("请选择开始结束时间")
        return false;
      }
      if (SelectedListbind.length != 0) {
        SelectedListbind.forEach((li) => {
          var resultArr = this.AboutDevice.filter(
            (_item) => _item.roomId == li
          )[0];
          if (resultArr) {
            if (resultArr.imei) {
              if (resultArr.manufactureId == 201 || resultArr.manufactureId == 221) {
                var room = roomAbout.filter(item => item.roomId == resultArr.roomId)[0]
                resultArr.roomName = room.roomName
                this.putCarfidzg(resultArr, this.multipleSelection2);
              } else if (resultArr.manufactureId == 101) {
                var room = roomAbout.filter(item => item.roomId == resultArr.roomId)[0]
                resultArr.roomName = room.roomName
                this.putCarfid(resultArr, this.multipleSelection2);
              } else if (resultArr.manufactureId == 1201) {
                var room = roomAbout.filter(item => item.roomId == resultArr.roomId)[0]
                resultArr.roomName = room.roomName
                this.putCarfidLwj(resultArr, this.multipleSelection2);
              }
            }
          } else {
            this.$message.error("该房间未绑定门锁")
          }
        });
      } else {
        this.$message.error("请选择要添加的房间")
      }
    },
    getTypeSort(data, type) {
      var num = 1
      data.map(li => {
        if (li.type == type) {
          num++
        }
      })
      return num
    },
    // 点击查看已绑房间
    backTop() {
      this.drawer = false
    },
    // 选择绑定房间弹窗
    bindRoomTop() {
      this.bindRoomStatus = true
    },
    getSelectedTab(ids) {
      return new Promise((resolve, reject) => {
        var selected_tab = [];
        var selected = [];
        var zNodes = this.zNodes
        ids.map(function (item) {
          selected_tab = zNodes.filter(function (obj) {
            return obj.id == item
          });
          selected.push(Object.assign({}, ...selected_tab))
        })
        resolve(selected)
      })
    },
    bindRoomTop1(index, row) {
      this.multipleSelection2 = row
      this.bindRoomStatus1 = true
      let startTime = ''
      let endTime = '';
      if (JSON.stringify(row.startTime).length == 10) {
        startTime = new Date(row.startTime * 1000)
      } else {
        startTime = new Date(row.startTime)
      }
      if (JSON.stringify(row.endTime).length == 10) {
        endTime = new Date(row.endTime * 1000)
      } else {
        endTime = new Date(row.endTime)
      }
      this.value2 = [startTime, endTime]
      this.dateRange = [startTime, endTime]
      let ids = []
      let arr = []
      this.roomtable.map(li => {
        ids.push(li.roomId)
        let tt = this.findParentIds(this.bindRoomlist, li.roomId)
        arr.push(...tt)
      })
      console.log(row, arr)
      let treeId = ids.concat([...new Set(arr)])
      this.getSelectedTab(treeId).then((res) => {
        console.log(res);
        if (res.length > 0) {
          this.roomlist = []
          var array = utils.uniqueArray(res, "id");
          console.log(array);
          this.roomlist = this.ztreeToElementTree(array, []);
          console.log(this.roomlist);
        } else {
          this.roomlist = []
        }
      })

    },
    findParentIds(dataSource, nodeId) {
      const parentIds = []; // 用于存储所有父节点ID的数组

      // 定义一个递归函数，用于遍历整棵树并查找子节点的所有父节点
      function traverse(node, nodeId) {
        if (node.id === nodeId) { // 如果当前节点的ID等于子节点的ID，则表示已经找到了子节点，可以开始向上查找父节点
          return true; // 返回true表示已经找到了子节点
        }

        if (node.children) { // 如果当前节点有子节点，则继续遍历子节点
          for (const childNode of node.children) {
            if (traverse(childNode, nodeId)) { // 如果在子节点中找到了子节点的父节点，则将当前节点的ID添加到父节点ID数组中，并返回true表示已经找到了子节点
              parentIds.push(node.id);
              return true;
            }
          }
        }

        return false; // 如果当前节点不是子节点的父节点，则返回false
      }

      // 从根节点开始遍历整棵树，并调用递归函数查找子节点的所有父节点
      for (const node of dataSource) {
        if (traverse(node, nodeId)) { // 如果在当前节点的子树中找到了子节点的父节点，则直接退出循环
          break;
        }
      }

      return parentIds; // 返回所有父节点ID的数组
    },
    getallselectRoom() {
      var ids = []
      this.roomtable.map(li => {
        ids.push(li.roomId)
      })
      var selected_tab = [];
      var selected = [];
      var zNodes = this.zNodes
      ids.map(function (item) {
        selected_tab = zNodes.filter(function (obj) {
          return obj.id == item
        });
        selected.push(Object.assign({}, ...selected_tab))
      })
      if (selected.length > 0) {
        var array = utils.uniqueArray(selected, "id");
        this.roomlistVoucher = []
        this.roomlistVoucher = this.ztreeToElementTree(array, []);
      } else {
        this.roomlistVoucher = []
      }
    },
    checkNodeSearch(e) {
      let selectRow = []
      console.log(e)
      e.map(li => {
        selectRow.push(...li)
      })
      console.log(selectRow)
      // this.bindSelectedList = selectRow
    },
    // 选择绑定房间返回的子级id
    checkNode(e) {
      let selectRow = []
      e.map(li => {
        let id = li[li.length - 1]
        selectRow.push(id)
      })
      this.bindSelectedList = selectRow
      this.getDeviceAllRoom()
    },
    getDeviceAllRoom() {
      let obj = {
        ids: this.bindSelectedList
      }
      if (obj.ids.length > 0) {
        httpPost(obj, this.$api.onlySiteDevice).then((res) => {
          this.AboutDevice = res.data.list;
          this.$store.commit("getAboutDevice", res.data.list);
        });
      }
    },
    checkNode1(e) {
      var selectRow = []
      console.log(e)
      e.map(li => {
        selectRow.push(li[li.length - 1])
      })
      this.SelectedList = selectRow
      console.log(this.SelectedList)
    },
    // 选择绑定房间返回的子级id
    checkNode2(e) {
      this.credentialSearch.roomId = e[e.length - 1]
    },
    checkEnterpriseList(e) {
      this.$nextTick(() => {
        var list = this.$refs['cascader'].getCheckedNodes()
        this.checkEnterpriseNode = list
      })
    },
    checkNodeRecord(e) {
      this.recordFilterCondition.roomId = e[e.length - 1]
    },
    childNodesDeep(nodes, arr) {
      if (nodes)
        nodes.forEach((ele) => {
          arr.push(ele.id);
          if (ele.children) {
            this.childNodesDeep(ele.children, arr);
          }
        });
    },
    checkNode3(e) {
      var selectRow = []
      e.map(li => {
        selectRow.push(li[li.length - 1])
      })
      // var roomlist=this.roomlist
      // selectRow = this.getChild(roomlist, e[e.length - 1], [])
      this.SelectedListVoucher = selectRow
    },
    // 绑定房间
    bindsave() {
      let SelectedListbind = this.bindSelectedList
      let infostr = ''//JSON.parse(this.drawerRow.info);
      if (typeof (this.drawerRow.info) == 'object') {
        infostr = this.drawerRow.info
      } else if (typeof (this.drawerRow.info) == 'string') {
        infostr = JSON.parse(this.drawerRow.info)
      }
      var fjid = [];
      var _this = this
      if (this.value2[0] == '' || this.value2[1] == '') {
        this.$message.error("请选择开始结束时间")
        return false;
      }
      if (SelectedListbind.length != 0) {
        SelectedListbind.forEach((li, index) => {
          var str = {
            cardId: this.drawerRow.id,
            siteId: li,
            startTime: this.value2[0],
            endTime: this.value2[1]
          };
          var resultArr = this.AboutDevice.filter(
            (_item) => _item.roomId == li
          )[0];
          console.log(resultArr, SelectedListbind, this.AboutDevice)
          var roomName = this.zNodes.filter(item => li === item.id)
          if (resultArr) {
            if (resultArr.imei) {
              fjid.push(str);
              if (resultArr.manufactureId == 201 || resultArr.manufactureId == 221) {
                var data = {
                  lockerId: resultArr.deviceNum,
                  imei: resultArr.imei,
                  lockerUserId: infostr.userPassword,
                  keyId: infostr.userPassword,
                  role: 0,
                  action: 1,
                  order: 6226,
                  cardName: this.drawerRow.name,
                  roomName: roomName[0].name
                };
                ICINLocker.addUserToLock(data.lockerId, data.imei, data
                  .lockerUserId, data.role, data.action, data.order, data.cardName, data
                  .roomName, (
                    callback) => {
                  console.log(callback);
                  if (callback.success) {
                    var locakUserdata = {
                      deviceNum: resultArr.deviceNum,
                      imei: resultArr.imei,
                      cardId: this.drawerRow.id,
                      content: JSON.stringify(
                        data
                      ), //operateMode:NFC-10、把人员添加到凭证-1
                      type: 26,
                      serial: callback.data.serialNumber,
                      startTime: moment(this.value2[0]).valueOf() / 1000,
                      endTime: moment(this.value2[1]).valueOf() / 1000,
                    }
                    utils.sendLockUser(locakUserdata, (callbackLOCK) => {

                    })
                  } else {
                    this.$message.error(callback.msg);
                    if (callback.code == 201016) {
                      httpPost(fjid, this.$api.bindCard).then((res) => {
                        if (res.success) {
                          this.bindRoomStatus = false
                          this.getcheckInList()
                          this.getAboutRoom();
                          setTimeout(() => {
                            _this.updateRoom();
                          }, 1000);
                          this.$message.success("用户门锁已存在")
                        } else {
                          this.$message.error("添加失败")
                        }
                      });
                    }
                  }
                })
                if ((SelectedListbind.length - 1) === index) {
                  httpPost(fjid, this.$api.bindCard).then((res) => {
                    if (res.success) {
                      this.bindRoomStatus = false
                      this.getAboutRoom();
                      this.getcheckInList()
                      setTimeout(() => {
                        _this.updateRoom();
                      }, 1000);
                    } else {
                      this.$message.error("添加失败")
                    }
                  });
                }
              } else if (resultArr.manufactureId == 101) {
                var userstr = {
                  imei: resultArr.imei,
                  deviceNum: resultArr.deviceNum,
                  userTelephone: infostr.userTelephone,
                  userPassword: infostr.userPassword,
                  password: infostr.userPassword,
                  operateMode: 26,
                  order: 6226,
                  passwordStartTime: this.moment(this.value2[0]).format(
                    "YYYYMMDDHHmmss"),
                  passwordEndTime: this.moment(this.value2[1]).format("YYYYMMDDHHmmss"),
                  is: false,
                  cardName: this.drawerRow.name,
                  roomName: roomName[0].name
                };
                ICINLocker.LDAddUser(userstr.deviceNum, userstr.imei, userstr.userTelephone,
                  userstr.userPassword, userstr.password, userstr.passwordStartTime,
                  userstr.passwordEndTime, userstr.operateMode, userstr.order, userstr
                  .cardName, userstr.roomName, false, (callback) => {
                    if (callback.success) {
                      console.log(_this.value2)
                      var locakUserdata = {
                        deviceNum: resultArr.deviceNum,
                        imei: resultArr.imei,
                        cardId: this.drawerRow.id,
                        content: JSON.stringify(
                          userstr
                        ), //operateMode:NFC-10、把人员添加到凭证-1
                        type: 26,
                        serial: callback.data.serialNumber,
                        startTime: moment(_this.value2[0]).valueOf() / 1000,
                        endTime: moment(_this.value2[1]).valueOf() / 1000,
                      }
                      utils.sendLockUser(locakUserdata, (callbackLOCK) => {

                      })
                      if ((SelectedListbind.length - 1) === index) {
                        httpPost(fjid, this.$api.bindCard).then((res) => {
                          if (res.success) {
                            this.bindRoomStatus = false
                            this.getAboutRoom();
                            this.getcheckInList()
                            setTimeout(() => {
                              _this.updateRoom();
                            }, 1000);
                          } else {
                            this.$message.error("添加失败")
                          }
                        });
                      } else {
                        this.$message.error(callback.msg);
                      }
                    } else {
                      this.$message.error("添加失败")
                    }
                  })
              } else if (resultArr.manufactureId == 1201) {
                if ((SelectedListbind.length - 1) === index) {
                  httpPost(fjid, this.$api.bindCard).then((res) => {
                    if (res.success) {
                      this.bindRoomStatus = false
                      this.getAboutRoom();
                      this.getcheckInList()
                      setTimeout(() => {
                        _this.updateRoom();
                      }, 1000);
                    } else {
                      this.$message.error("添加失败")
                    }
                  });
                }
              }
            } else {
              fjid.push(str);
              if ((SelectedListbind.length - 1) === index) {
                httpPost(fjid, this.$api.bindCard).then((res) => {
                  if (res.success) {
                    this.bindRoomStatus = false
                    this.getAboutRoom();
                    this.getcheckInList()
                    setTimeout(() => {
                      _this.updateRoom();
                    }, 1000);
                  } else {
                    this.$message.error("添加失败")
                  }
                });
              }
            }
          } else {
            fjid.push(str);
            if ((SelectedListbind.length - 1) === index) {
              httpPost(fjid, this.$api.bindCard).then((res) => {
                if (res.success) {
                  this.bindRoomStatus = false
                  this.getAboutRoom();
                  this.getcheckInList()
                  setTimeout(() => {
                    _this.updateRoom();
                  }, 1000);
                } else {
                  this.$message.error("添加失败")
                }
              });
            } else {
              return this.$message.error("该房间未绑定门锁")
            }
          }
        });
      } else {
        this.$message.error("请选择要添加的房间")
      }
    },

    // 下发凭证
    putCarfidzg(resultArr, row) {
      var data = {};
      var userTelephone = JSON.parse(row.content).userTelephone;
      var userPassword = JSON.parse(row.content).userPassword;
      var startTime = new Date(this.value2[0]).getTime() / 1000
      var endTime = new Date(this.value2[1]).getTime() / 1000
      var passwordStartTime = new Date(this.value2[0]).getTime() / 1000
      var passwordEndTime = new Date(this.value2[1]).getTime() / 1000
      // var passwordStartTime = JSON.stringify(row.startTime)
      // var passwordEndTime = JSON.stringify(row.endTime)
      // var sort=this.getTypeSort(this.roomtable1,row.type)
      var pzname = JSON.parse(row.content).pzname || ''
      if (passwordStartTime.length == 13) {
        passwordStartTime = startTime / 1000
      }
      if (passwordEndTime.length == 13) {
        passwordEndTime = endTime / 1000
      }

      if (row.type == 11) {
        // if(pzname==''){
        // 	pzname='指纹'+sort
        // }
        var fpId = new Date();
        var fingerprint1 = JSON.parse(row.content).fingerprint;
        var str = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          fingerprintAlias: JSON.parse(row.content).fingerprintAlias,
          userTelephone: userTelephone,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          length: fingerprint1.length / 2,
          fpTimeId: fpId.getTime(),
          operateMode: 16,
          type: 1,
          order: 6216,
          fingerprint: fingerprint1,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          pzname: (pzname ? pzname : ''),
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        var data3 = {
          lockerId: resultArr.deviceNum,
          imei: resultArr.imei,
          order: 6216,
          lockerUserId: JSON.parse(this.drawerRow.info).userPassword,
          keyId: JSON.parse(this.drawerRow.info).userPassword,
          fingerType: 0,
          file: fingerprint1,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName,
          startTime: passwordStartTime,
          endTime: passwordEndTime
        };
        ICINLocker.addFingerPrints(data3.lockerId, data3.imei, data3.lockerUserId, data3.fingerType, data3
          .file, data3.startTime, data3.endTime, data3.cardName, data3.roomName, (callback) => {
            if (callback.success) {
              var data = {
                cardId: this.drawerRow.id,
                deviceNum: resultArr.deviceNum,
                imei: resultArr.imei,
                content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                type: str.type,
                serial: callback.data.serialNumber,
                startTime: startTime,
                endTime: endTime,
                order: 6216
              };
              httpPost(data, this.$api.addCertificates).then((res) => {
                this.bindRoomStatus1 = false
                this.getcertificate(); //获取凭证
              });
            } else {
              this.$message.error(callback.msg)
            }
          })
      } else if (row.type == 12) {
        if (JSON.parse(row.content).password.length != 16) {
          this.$message.error("卡格式错误，请重新录入")
          return
        }
        // if(pzname==''){
        // 	pzname='身份证'+sort
        // }
        var str = {
          imei: resultArr.imei,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 13,
          order: 6213,
          type: 2,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          pzname: pzname,
          is: false,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        var data3 = {
          lockerId: resultArr.deviceNum,
          imei: resultArr.imei,
          lockerUserId: userPassword,
          keyId: userPassword,
          action: 1,
          taskStatus: 1,
          order: 6213,
          startTime: passwordStartTime,
          endTime: passwordEndTime,
          cardType: 36,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName,
          cardNo: JSON.parse(row.content).password
        };
        ICINLocker.RfCardRegister(data3.lockerId, data3.imei, data3.keyId, data3.action, data3.taskStatus,
          data3.cardNo, data3.cardType, data3.startTime, data3.endTime, data3.order, data3.cardName, data3.roomName,
          (callback) => {
            if (callback.success) {
              var data = {
                cardId: this.drawerRow.id,
                imei: resultArr.imei,
                deviceNum: resultArr.deviceNum,
                content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                type: str.type,
                serial: callback.data.serialNumber,
                startTime: startTime,
                endTime: endTime,
              };
              httpPost(data, this.$api.addCertificates).then((res) => {
                this.bindRoomStatus1 = false
                this.getcertificate(); //获取凭证
              });
            } else {
              this.$message.error(callback.msg)
            }
          })
      } else if (row.type == 13) {
        var password = ""
        if (JSON.parse(row.content).password.length == 8) {
          password = utils.cardFormatConversion(JSON.parse(row.content).password)
          password = password + '00000000'
        } else if (JSON.parse(row.content).password.length == 16) {
          password = JSON.parse(row.content).password
        } else {
          this.$message.error("卡格式错误，请重新录入")
          return
        }
        // if(pzname==''){
        // 	pzname='NFC'+sort
        // }
        var str = {
          imei: resultArr.imei,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: password,
          operateMode: 10,
          type: 3,
          order: 6210,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          pzname: pzname,
          is: false,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        var data3 = {
          lockerId: resultArr.deviceNum,
          lockerUserId: userPassword,
          keyId: userPassword,
          imei: resultArr.imei,
          action: 1,
          taskStatus: 1,
          order: 6210,
          startTime: passwordStartTime,
          endTime: passwordEndTime,
          cardType: 50,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName,
          cardNo: password
        };
        ICINLocker.RfCardRegister(data3.lockerId, data3.imei, data3.keyId, data3.action, data3.taskStatus,
          data3.cardNo, data3.cardType, data3.startTime,
          data3.endTime, data3.order, data3.cardName, data3.roomName, (callback) => {
            if (callback.success) {
              var data = {
                cardId: this.drawerRow.id,
                imei: resultArr.imei,
                deviceNum: resultArr.deviceNum,
                content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                type: str.type,
                serial: callback.data.serialNumber,
                startTime: startTime,
                endTime: endTime,
              };
              httpPost(data, this.$api.addCertificates).then((res) => {
                this.bindRoomStatus1 = false
                this.getcertificate(); //获取凭证
              });
            } else {
              this.$message.error(callback.msg)
            }
          })
      } else if (row.type == 14) {
        // if(pzname==''){
        // 	pzname='密码'+sort
        // }
        str = {
          imei: resultArr.imei,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 7,
          order: 6207,
          type: 4,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          pzname: pzname,
          is: false,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        var data3 = {
          lockerId: resultArr.deviceNum,
          imei: resultArr.imei,
          order: 6207,
          passwordCount: 255,
          lockerUserId: userPassword,
          keyId: userPassword,
          startTime: passwordStartTime,
          endTime: passwordEndTime,
          action: 1,
          password: JSON.parse(row.content).password,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        ICINLocker.addForeverPassword(data3.lockerId, data3.imei, data3.keyId, data3.action, data3.password,
          data3.passwordCount, data3.startTime, data3.endTime, data3.order, data3.cardName, data3
          .roomName, (callback) => {
            if (callback.success) {
              var data = {
                cardId: this.drawerRow.id,
                imei: resultArr.imei,
                deviceNum: resultArr.deviceNum,
                content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                type: str.type,
                serial: callback.data.serialNumber,
                startTime: startTime,
                endTime: endTime,
              };
              httpPost(data, this.$api.addCertificates).then((res) => {
                this.bindRoomStatus1 = false
                this.getcertificate(); //获取凭证
              });

            } else {
              this.$message.error(callback.msg)
            }
          })

      }
    },
    putCarfidLwj(resultArr, row) {
      var userTelephone = JSON.parse(row.content).userTelephone;
      var userPassword = JSON.parse(row.content).userPassword;
      var startTime = new Date(this.value2[0]).getTime() / 1000
      var endTime = new Date(this.value2[1]).getTime() / 1000
      var passwordStartTime = new Date(this.value2[0]).getTime() / 1000
      var passwordEndTime = new Date(this.value2[1]).getTime() / 1000
      var pzname = JSON.parse(row.content).pzname || ''
      if (passwordStartTime.length == 13) {
        passwordStartTime = startTime / 1000
      }
      if (passwordEndTime.length == 13) {
        passwordEndTime = endTime / 1000
      }
      if (row.type == 11) {
        var fpId = new Date();
        var fingerprint1 = JSON.parse(row.content).fingerprint;
        var str = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          fingerprintAlias: JSON.parse(row.content).fingerprintAlias,
          userTelephone: userTelephone,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          length: fingerprint1.length / 2,
          fpTimeId: fpId.getTime(),
          operateMode: 16,
          type: 1,
          order: 6216,
          fingerprint: fingerprint1,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          pzname: (pzname ? pzname : ''),
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        let data = {
          code: "lwj/fpOperate",
          data: {
            lockerId: resultArr.deviceNum,
            lockerUserId: JSON.parse(row.content).userPassword,
            action: 1,
            fpData: fingerprint1,
            startTime: startTime,
            endTime: endTime,
            operateMode: 16,
            order: 6216,
            cardName: row.name + '-' + (pzname ? pzname : ''),
            roomName: resultArr.roomName
          }
        }
        httpPost(data, this.$api.sendCommand).then(res => {
          if (res.success) {
            var data = {
              cardId: this.drawerRow.id,
              deviceNum: resultArr.deviceNum,
              imei: resultArr.imei,
              content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
              type: str.type,
              serial: res.data.serialNumber,
              startTime: startTime,
              endTime: endTime,
              order: 6216
            };
            httpPost(data, this.$api.addCertificates).then((res) => {
              this.bindRoomStatus1 = false
              this.getcertificate(); //获取凭证
            });
          } else {
            this.$message.error(res.msg)
          }
        })
      } if (row.type == 13) {

        var password = ""
        if (JSON.parse(row.content).password.length == 8) {
          password = utils.cardFormatConversion(JSON.parse(row.content).password)
          password = password + '00000000'
        } else if (JSON.parse(row.content).password.length == 16) {
          password = JSON.parse(row.content).password
        } else {
          this.$message.error("卡格式错误，请重新录入")
          return
        }
        let startTime = new Date(this.value2[0]).getTime() / 1000
        let endTime = new Date(this.value2[1]).getTime() / 1000
        let data = {
          code: "lwj/cardOperate",
          data: {
            lockerId: resultArr.deviceNum,
            lockerUserId: JSON.parse(row.content).userPassword,
            action: 1,
            cardNo: JSON.parse(row.content).password,
            startTime: startTime,
            endTime: endTime,
            operateMode: 10,
            order: 6210,
            cardName: row.name + '-' + (pzname ? pzname : ''),
            roomName: resultArr.roomName
          }
        }
        let str = {
          imei: resultArr.imei,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 10,
          order: 6210,
          type: 3,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          pzname: pzname,
          is: false,
          cardName: row.name + '-' + (pzname ? pzname : ''),
          roomName: resultArr.roomName
        };
        httpPost(data, this.$api.sendCommand).then(res => {
          if (res.success) {
            var data = {
              cardId: this.drawerRow.id,
              imei: resultArr.imei,
              deviceNum: resultArr.deviceNum,
              content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
              type: str.type,
              serial: res.data.serialNumber,
              startTime: startTime,
              endTime: endTime,
            };
            httpPost(data, this.$api.addCertificates).then((res) => {
              this.bindRoomStatus1 = false
              this.getcertificate(); //获取凭证
            });

          } else {
            this.$message.error(callback.msg)
          }
        })

      } else if (row.type == 14) {
        if (JSON.parse(row.content).password == '') {
          this.$message.error('密码不能为空')
        } else {
          let startTime = new Date(this.value2[0]).getTime() / 1000
          let endTime = new Date(this.value2[1]).getTime() / 1000
          let data = {
            code: "lwj/passwordOperate",
            data: {
              lockerId: resultArr.deviceNum,
              lockerUserId: JSON.parse(row.content).userPassword,
              action: 1,
              password: JSON.parse(row.content).password,
              startTime: startTime,
              endTime: endTime,
              operateMode: 7,
              order: 6207,
              cardName: row.name + '-' + (pzname ? pzname : ''),
              roomName: resultArr.roomName
            }
          }
          let str = {
            imei: resultArr.imei,
            userTelephone: userTelephone,
            cardId: row.cardId,
            userPassword: userPassword,
            password: JSON.parse(row.content).password,
            operateMode: 7,
            order: 6207,
            type: 4,
            passwordStartTime: passwordStartTime,
            passwordEndTime: passwordEndTime,
            pzname: pzname,
            is: false,
            cardName: row.name + '-' + (pzname ? pzname : ''),
            roomName: resultArr.roomName
          };
          httpPost(data, this.$api.sendCommand).then(res => {
            if (res.success) {
              var data = {
                cardId: this.drawerRow.id,
                imei: resultArr.imei,
                deviceNum: resultArr.deviceNum,
                content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                type: str.type,
                serial: res.data.serialNumber,
                startTime: startTime,
                endTime: endTime,
              };
              httpPost(data, this.$api.addCertificates).then((res) => {
                this.bindRoomStatus1 = false
                this.getcertificate(); //获取凭证
              });

            } else {
              this.$message.error(callback.msg)
            }
          })
        }
      }

    },
    // 下发凭证
    putCarfid(resultArr, row) {
      var data = {};
      var userTelephone = JSON.parse(row.content).userTelephone;
      var userPassword = JSON.parse(row.content).userPassword;
      var startTime = new Date(this.value2[0]).getTime()
      var endTime = new Date(this.value2[1]).getTime()
      var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
      var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
      // var sort=this.getTypeSort(this.roomtable1,row.type)
      var pzname = JSON.parse(row.content).pzname || ''
      if (row.type == 11) {
        // if(pzname==''){
        // 	pzname='指纹'+sort
        // }
        var fpId = new Date();
        var fingerprint = JSON.parse(row.content).fingerprint;
        // var array = fingerprint.split(",");
        // var num = this.Bytes2Str(array);
        // return
        var str = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          fingerprintAlias: JSON.parse(row.content).fingerprintAlias,
          userTelephone: userTelephone,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          length: fingerprint.length / 2,
          fpTimeId: fpId.getTime(),
          operateMode: 16,
          type: 1,
          order: 6216,
          fingerprint: fingerprint,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          cardName: row.name + '-' + pzname,
          roomName: resultArr.roomName,
          pzname: pzname,
          pass: false
        };
        ICINLocker.LDAddFingerPrints(str.deviceNum, str.imei, str.userTelephone, str.userPassword, str
          .password, str.passwordStartTime, str.passwordEndTime, str.operateMode, str.order, str.length,
          str.fpTimeId, str.fingerprint, str.cardName, str.roomName, str.pass, (callback) => {
            if (callback.success) {
              var datafid = {
                deviceNum: resultArr.deviceNum,
                imei: resultArr.imei,
                cardId: this.drawerRow.id,
                content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                type: str.type,
                serial: callback.data.serialNumber,
                startTime: startTime / 1000,
                endTime: endTime / 1000,
              };
              httpPost(datafid, this.$api.addCertificates).then((res) => {
                if (res.success) {
                  this.bindRoomStatus1 = false
                  this.$message.success("下发成功")
                  this.getcertificate(); //获取凭证
                } else {
                  this.$message.error("下发失败")
                }
              });
            } else {
              this.$message.error(callback.msg)
            }
          })
        return false
      } else if (row.type == 12) {
        // if(pzname==''){
        // 	pzname='身份证'+sort
        // }
        data = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 13,
          order: 6213,
          type: 2,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          is: false,
          cardName: row.name + '-' + pzname,
          roomName: resultArr.roomName,
          pzname: pzname,
        };
      } else if (row.type == 13) {
        // if(pzname==''){
        // 	pzname='NFC'+sort
        // }
        data = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 10,
          order: 6210,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          is: false,
          type: 3,
          cardName: row.name + '-' + pzname,
          roomName: resultArr.roomName,
          pzname: pzname,
        };
      } else if (row.type == 14) {
        // if(pzname==''){
        // 	pzname='密码'+sort
        // }
        data = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 7,
          order: 6207,
          type: 4,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          is: false,
          cardName: row.name + '-' + pzname,
          roomName: resultArr.roomName,
          pzname: pzname,
          pass: false
        };
      }
      ICINLocker.LDRfCardRegister(data.deviceNum, data.imei, data.userTelephone, data.userPassword, data
        .password, data
        .passwordStartTime, data.passwordEndTime, data.operateMode, data.order, data.cardName, data
        .roomName, data.pass, (
          callback) => {
        if (callback.success) {
          var datafid = {
            deviceNum: resultArr.deviceNum,
            imei: resultArr.imei,
            cardId: this.drawerRow.id,
            content: JSON.stringify(data), //operateMode:NFC-10、把人员添加到凭证-1
            type: data.type,
            serial: callback.data.serialNumber,
            startTime: startTime / 1000,
            endTime: endTime / 1000,
          };
          httpPost(datafid, this.$api.addCertificates).then((res) => {
            if (res.success) {
              this.bindRoomStatus1 = false
              this.$message.success("下发成功")
              this.getcertificate(); //获取凭证
            } else {
              this.$message.error("下发失败")
            }
          });
        } else {
          this.$message.error(callback.msg)
        }
      })
    },
    // 添加房源后更新人员和房间关系
    updateRoom() {
      var array = this.returnScreenRoom(this.drawerRow.id);
      var SelectedList = [],
        roomtable = [], roomScreen = [];
      array.map((li) => {
        SelectedList.push(li.roomId);
        var name = utils.findIndexArray(this.$store.state.zNodes, li.roomId, [])
        var path = ''
        if (name) {
          path = name.join('/')
        }
        li.roomName = path
        let result = this.checkInListing.filter(item => item.siteId == li.roomId)[0]
        let deviceResult = this.allAboutDevice.filter(it => it.roomId == li.roomId)[0]
        if (result) {
          li['endTime'] = moment(result.endTime).format("YYYY-MM-DD HH:mm:ss") || ''
          li['startTime'] = moment(result.startTime).format("YYYY-MM-DD HH:mm:ss") || ''
          li['name'] = result.name
          li.card = li.cardId
        }
        if (deviceResult) {
          li['deviceNum'] = deviceResult.deviceNum
          li['imei'] = deviceResult.imei
          li['manufactureId'] = deviceResult.manufactureId
        }
        if (li.isRoom == 1) {
          roomScreen.push(li)
        }
        roomtable.push(li);
      });
      console.log(roomScreen);
      this.roomScreen = roomScreen
      this.SelectedList = SelectedList;
      this.selectkeyadd = SelectedList;
      var list = roomtable.sort((pre, cur) => pre.siteId - cur.siteId)
      this.roomtable = list;
      this.roomstatus = !this.roomstatus;
      this.addroomstatus = !this.addroomstatus;
      this.$message.success("操作成功");
    },
    // 打开侧边栏
    operation(index, row) {
      this.activeName = index;
      this.drawerRow = row;
      this.bindroomstatus = true;
      this.voucher.username = row.name;
      this.drawer = true;
      this.personname = row.name
      this.getAboutDevice1();
      var data = {
        ids: [row.id]
      }
      httpPost(data, this.$api.getTenant).then(res => {
        if (res.code == 200) {
          this.checkInListing = res.data
          if (res.data.length > 0) {
            this.maxDateTime = res.data[0].endTime
            this.minDateTime = res.data[0].startTime
            this.value2 = [this.minDateTime, this.maxDateTime]
          } else {
            this.maxDateTime = ''
            this.minDateTime = ''
            this.value2 = ['', '']
          }
          setTimeout(() => {
            this.screenRoom(row.id);
          }, 500)
        } else {
          this.checkInListing = []
        }
      })
      this.getItems(row.siteId);
      // this.getOperates(row.id);
      this.getcertificate();
    },
    getcheckInList() {
      var data = {
        ids: [this.drawerRow.id]
      }
      httpPost(data, this.$api.getTenant).then(res => {
        console.log(res);
        if (res.code == 200) {
          this.checkInListing = res.data
        } else {
          this.checkInListing = []
        }
      })
    },
    getSearchRoomList() {
      var ids = []
      this.roomtable.map(li => {
        ids.push(li.roomId)
      })
      var selected_tab = [];
      var selected = [];
      var zNodes = this.zNodes
      ids.map(function (item) {
        selected_tab = zNodes.filter(function (obj) {
          return obj.id == item
        });
        selected.push(Object.assign({}, ...selected_tab))
      })
      if (selected.length > 0) {
        var array = utils.uniqueArray(selected, "id");
        this.roomlist2 = []
        this.roomlist2 = this.ztreeToElementTree(array, []);
      } else {
        this.roomlis2 = []
      }
    },
    // 凭证列表获取
    getcertificate() {
      if (this.credentialSearch.roomId) {
        var t = {
          roomIds: [this.credentialSearch.roomId],
          lockType: 1
        };
        var data = {
          q: JSON.stringify(t),
        };
        httpPost(data, this.$api.getDeviceItems).then((res) => {
          if (res.success) {
            var data = {
              pageNum: 0,
              pageSize: 0,
              orderBy: "create_at desc",
              q: {
                cardId: this.drawerRow.id,
                deviceNum: res.data.list[0].deviceNum,
                imei: this.credentialSearch.imei,
                status: this.credentialSearch.status,
                type: this.credentialSearch.type,
                types: "10,11,12,13,14"
              },
            };
            this.getfilterAcquisition(data)
          } else {
            this.$message.error("获取房间对应门锁信息失败")
          }
        })
      } else {
        var data = {
          pageNum: 0,
          pageSize: 0,
          orderBy: "create_at desc",
          q: {
            cardId: this.drawerRow.id,
            deviceNum: this.credentialSearch.deviceNum,
            imei: this.credentialSearch.imei,
            status: this.credentialSearch.status,
            // type: this.credentialSearch.type,
            types: this.credentialSearch.type || "10,11,12,13,14"
          },
        };
        this.getfilterAcquisition(data)
      }
    },
    getfilterAcquisition(data) {
      console.log(data)
      var dataall = {
        pageNum: 0,
        pageSize: 0,
        orderBy: "create_at desc",
        q: {
          cardId: this.drawerRow.id,
          deviceNum: this.credentialSearch.deviceNum,
          imei: this.credentialSearch.imei,
          inStatus: "0,1,702",
          types: "0,1,2,3,4"
        },
      }
      httpGet(dataall, this.$api.getCertificates).then((resall) => {
        if (resall.code == 200) {
          var sendOn = utils.zlib_unzip(resall.data)
          console.log(sendOn)
          var sendstatus = true
          if (resall.data.total == 0) {
            sendstatus = false
          }
          httpGet(data, this.$api.getCertificates).then((res) => {
            let certiflist = utils.zlib_unzip(res.data);
            let AboutDevice = this.allAboutDevice;
            console.log(certiflist)
            certiflist.map((li) => {
              li['color'] = '1'
              var licontent = ''
              var filterResult = ''
              if (li.type == 11) {
                licontent = JSON.parse(li.content).pzname
                filterResult = sendOn.filter(item => JSON.parse(item.content).pzname == licontent)
              } else if (li.type == 13) {
                // licontent=utils.cardFormatConversion(JSON.parse(li.content).password)
                licontent = JSON.parse(li.content).pzname
                filterResult = sendOn.filter(item => JSON.parse(item.content).pzname == licontent)
              } else {
                licontent = JSON.parse(li.content).password
                filterResult = sendOn.filter(item => JSON.parse(item.content).password == licontent)
              }
              if (sendstatus && filterResult && filterResult.length > 0) {
                var statusOne = filterResult.some(item => item.status == 0)
                var statusTwo = filterResult.some(item => item.status == 1)
                var statusThree = filterResult.some(item => item.status == 702)
                if (statusOne) {
                  li['color'] = '0'
                } else if (!statusOne && !statusThree && statusTwo) {
                  li['color'] = '1'
                } else if (!statusOne && statusThree) {
                  li['color'] = '702'
                } else {
                  li['color'] = '999'
                }
              }
              li.createAt = this.time(+new Date(li.createAt));
              li['userTelephone'] = JSON.parse(li.content).userTelephone;
              li.pzname = JSON.parse(li.content).pzname;
              li.password = JSON.parse(li.content).password;
              li['startTimeText'] = utils.formatTime(li.startTime)
              li['fingerprintAlias'] = JSON.parse(li.content).fingerprintAlias || ''
              li['endTimeText'] = utils.formatTime(li.endTime)
              li['data'] = JSON.parse(li.content).password
              if (li.type == 1) {
                li['data'] = li.id
              }
              if (li.pzname) {
                var statusif = li.pzname.indexOf('蓝牙')
                if (statusif) {
                  li['DeletePermissions'] = true
                } else {
                  if (li.type != 11) {
                    li['DeletePermissions'] = true
                  } else {
                    li['DeletePermissions'] = false
                  }
                }
              } else {
                li['DeletePermissions'] = true
              }
            });
            this.roomtable1 = certiflist;
            this.total1 = res.data.total;
          });
        }
      })
    },
    // 筛选和这个人员有关的房源
    screenRoom(id) {
      console.log("调用");
      var roomAbout = this.$store.state.roomAbout;
      var SelectedList = [],
        roomtable = [], roomScreen = [];
      roomAbout.map((li) => {
        var name = utils.findIndexArray(this.$store.state.zNodes, li.roomId, [])
        var path = ''
        if (name) {
          path = name.join('/')
        }
        li.roomName = path
        if (li.cardId == id) {
          if (li.layout != null) {
            SelectedList.push(li.roomId);
          }
          let result = this.checkInListing.filter(item => item.siteId == li.roomId)[0]
          let deviceResult = this.allAboutDevice.filter(it => it.roomId == li.roomId)[0]
          if (result) {
            li['endTime'] = moment(result.endTime).format("YYYY-MM-DD HH:mm:ss") || ''
            li['startTime'] = moment(result.startTime).format("YYYY-MM-DD HH:mm:ss") || ''
            li['name'] = result.name
            li['id'] = result.id
            li.card = li.cardId
          }
          if (deviceResult) {
            li['deviceNum'] = deviceResult.deviceNum
            li['imei'] = deviceResult.imei
            li['manufactureId'] = deviceResult.manufactureId
          }
          if (li.isRoom == 1) {
            roomScreen.push(li)
          }
          roomtable.push(li);
        }
      });
      this.roomtablestatus = false;
      if (this.activeName == 0) {
        var data = JSON.parse(JSON.stringify(this.zNodes))
        // var zNodes = utils.filterObj(data, SelectedList)
        var zNodes = data
        var array = utils.uniqueArray(zNodes, "id");
        console.log(array);
        var bindRoomlist = this.ztreeToElementTree(array, []);
        this.bindRoomlist = bindRoomlist
      } else if (this.activeName == 1) {
        var data = JSON.parse(JSON.stringify(this.zNodes))
        var array = utils.uniqueArray(data, "id");
        this.bindRoomlist = this.ztreeToElementTree(array, []);
        // this.bindRoomlist = this.roomlist
      }
      var list = roomtable.sort((pre, cur) => pre.siteId - cur.siteId)
      console.log(list);
      this.getSearchRoomList()
      this.$nextTick(function () {
        this.roomtable = list;
        this.SelectedList = SelectedList;
        this.roomtablestatus = true;
        this.roomScreen = roomScreen
      });
    },
    ztreeToElementTree(data, config) {
      var id = 'id' // 定义ztree数据存储id（自身的id）的key值，可以自定义但一般都是id、pid这种
      var pid = 'pid' // 定义ztree数据存储pid（父id）的key值
      var children = 'children' // 定义生成的element tree存储子节点的key，可以在element中规定defaultProps: {children: 'children'}
      var idMap = {} // 将原始数据转化为以id为key的map
      var elementTree = [] // 输出的element tree数据
      data.forEach(item => {
        item['value'] = item.id
        item['label'] = item.name
        idMap[item.id] = item
      })
      data.forEach(item => {
        // debugger
        if (idMap[item.pid] != idMap[item.id] && idMap[item.pid]) { // 该item项有爸爸，放到对应的父节点下
          !idMap[item.pid].hasOwnProperty(children) && (idMap[item.pid][children] = [])
          idMap[item.pid][children].push(item)
        } else { // 根节点
          elementTree.push(item)
        }
      });
      console.log(elementTree);
      return elementTree
    },
    // 删除操作
    handleDelete(index, row) {
      this.drawerRow = row
      var that = this
      // 二次确认删除
      this.$confirm("确定要删除吗？", "提示", {
        type: "warning",
      }).then(() => {
        var unbindCarddata = [];
        this.screenRoom1(row.id, function (roomtable) {
          var arr = []
          roomtable.map((li) => {
            var data = {
              siteId: li.roomId,
              cardId: row.id
            };
            arr.push(li.roomId)
            unbindCarddata.push(data);
          });
          if (roomtable.length > 0) {
            that.$confirm("是否先退租已入住房间？", "提示", {
              type: "warning",
            }).then(() => {
              console.log(roomtable)
              roomtable.map((li, index) => {
                that.deleteRoomfun(index, li)
              })
            })
          } else {
            httpPost(unbindCarddata, that.$api.unbindCard).then((res) => {
              var data = {
                ids: [row.id]
              };
              httpPost(data, that.$api.deleteCard).then((res) => {
                if (res.success) {
                  that.$message.success("删除成功");
                  that.deleteUser(row, arr);
                  that.getlist();
                } else {
                  that.$message.error("删除失败");
                }
              });
            });
          }
        })
      });
    },
    //添加
    handleSearch1() {
      this.modify = true;
      this.editVisiblelist = true;
    },
    // 保存编辑
    saveEdit() {
      // 添加人员的凭证保存
      var documentType = this.documentType;
      var str = {};
      console.log(this.form)
      if (this.form.name == "" || this.form.enterpriseId === "" || this.form.number == "" || this.form.type === "") {
        this.$message.error("请填写完整信息");
      } else if (IdentityCodeValid(this.form.number)) {
        this.$message.error("请填写正确身份证号");
      } else if (!utils.verificationPhone(this.form.phone)) {
        this.$message.error("请填写正确手机号");
      } else {
        let phone = this.form.phone
        let infostr = {
          userTelephone: phone,
          userPassword: phone.substring(phone.length - 6, phone.length),
          userId: phone.substring(phone.length - 6, phone.length),
          keyId: phone.substring(phone.length - 6, phone.length)
        };
        var data = {
          cardId: this.form.cardId,
          cardState: 1,
          info: JSON.stringify(infostr),
          name: this.form.name,
          number: this.form.number,
          phone: this.form.phone,
          sex: parseInt(this.form.sex),
          enterpriseId: this.form.enterpriseId,
          type: this.form.type,
        };
        var drawerRowid = ''
        RequestSet.addPeople(data, (callback) => {
          if (callback.success) {
            this.editVisiblelist = false;
            let dataprise = []
            this.checkEnterpriseNode.map(li => {
              var obj = {
                itemId: callback.data,
                orderId: li.value,
              }
              dataprise.push(obj)
            })
            if (dataprise.length > 0) {
              httpPost(dataprise, this.$api.personBindEnterprise).then(res => {

              })
            }
            let ids = {
              ids: [callback.data]
            }
            httpPost(ids, this.$api.createkeyCard).then(res => {

            })
            this.getAboutRoom();
            this.getlist();
          } else {
            this.getlist();
          }
        })
        if (this.WhetherToGreatAnAccount) {
          var enterpriseName = this.enterpriselist.filter(item => item.id == this.form.enterpriseId)[0]
          if (enterpriseName) {
            var addform = {
              username: this.form.number,
              phone: this.form.phone,
              password: '123456',
              userType: 3,
              identity: 3,
              tenantId: this.$store.state.tenantId,
              enterpriseName: enterpriseName.name,
              enterpriseId: this.form.enterpriseId
            }
            httpPost(addform, this.$api.addUser).then((res3) => {
              if (res3.success) {
                this.$message.success("创建账号成功")
              } else {
                this.$message.error("创建账号失败")
              }
            })
          } else {
            this.$message.error("请选择所属部门")
          }

        }
      }
    },
    // 录入凭证
    bindsave1() {
      let documentType = this.documentType;
      let str = {};
      let cardName = this.drawerRow.name,
        pzname = '';
      if (documentType == '请选择') {
        this.$message.error("请选择凭证类型")
        return false;
      }
      if (this.value2[0] == '' || this.value2[1] == '') {
        this.$message.error("请选择开始结束时间")
        return false;
      }
      console.log(this.value2)
      let sort = this.getTypeSort(this.roomtable1, documentType)
      pzname = this.voucher.pzname || ''
      if (documentType == 11 && this.voucher.fingerprintAlias == '') {
        this.$message.error("请选择指纹别名");
        return false
      }
      if (documentType == 10) {
        this.$message.error("人脸暂未开放");
        return
      } else if (documentType == 11) {
        var fingerprint = localStorage.getItem("fingerprint");
        var indexofstr = fingerprint.indexOf(',')
        if (indexofstr != -1) {
          var array = fingerprint.split(",");
          var num = this.Bytes2Str(array);
          fingerprint = num
        }
        if (pzname == '') {
          pzname = '指纹' + sort
        }
        str = {
          username: this.voucher.username,
          pzname: pzname,
          userTelephone: JSON.parse(this.drawerRow.info).userTelephone,
          userPassword: JSON.parse(this.drawerRow.info).userPassword,
          keyId: JSON.parse(this.drawerRow.info).keyId || '',
          userId: JSON.parse(this.drawerRow.info).userId || '',
          fingerprintAlias: this.voucher.fingerprintAlias,
          password: "",
          passwordStartTime: moment(this.value2[0]).format('YYYYMMDDHHmmss'),
          passwordEndTime: moment(this.value2[1]).format('YYYYMMDDHHmmss'),
          operateMode: 16,
          order: 6216,
          fingerprint: fingerprint,
        };
        let data = {
          cardId: this.drawerRow.id,
          content: JSON.stringify(str),
          type: documentType,
          startTime: parseInt(moment(this.value2[0]).valueOf() / 1000),
          endTime: parseInt(moment(this.value2[1]).valueOf() / 1000),
        };
        httpPost(data, this.$api.addCertificates).then((res) => {
          this.$message.success('下发成功')
          this.roomstatus1 = true;
          this.getcertificate(); //获取凭证
        });
        return false;
      } else if (documentType == 12) {
        var arr2 = ''
        if (this.voucher.idcard.length == 16) {
          arr2 = this.voucher.idcard
        } else if (this.voucher.idcard.length == 0) {
          this.$message.error("请输入身份证")
          return false
        } else {
          arr2 = dec2hex(this.voucher.idcard);
        }
        if (pzname == '') {
          pzname = '身份证' + sort
        }
        str = {
          username: this.voucher.username,
          pzname: pzname,
          userTelephone: JSON.parse(this.drawerRow.info).userTelephone,
          userPassword: JSON.parse(this.drawerRow.info).userPassword,
          keyId: JSON.parse(this.drawerRow.info).keyId || '',
          userId: JSON.parse(this.drawerRow.info).userId || '',
          operateMode: 13,
          order: 6213,
          password: arr2.toUpperCase(), //this.voucher.idcard,
          passwordStartTime: moment(this.value2[0]).format('YYYYMMDDHHmmss'),
          passwordEndTime: moment(this.value2[1]).format('YYYYMMDDHHmmss'),
          is: false,
        };
      } else if (documentType == 13) {
        var nfc = "";
        if (this.voucher.nfc.length == 8) {
          nfc = this.voucher.nfc
        } else if (this.voucher.nfc.length == 0) {
          this.$message.error("请输入NFC")
          return false
        } else {
          var array3 = dec2hex(this.voucher.nfc);
          var arr4 = group(array3, 2)
          arr4.map((li) => {
            nfc += li;
          });
        }
        if (pzname == '') {
          pzname = 'NFC' + sort
        }
        if (this.regularCard) {
          nfc = nfc + 'AA55'
        }
        str = {
          username: this.voucher.username,
          pzname: pzname,
          operateMode: 10,
          order: 6210,
          userTelephone: JSON.parse(this.drawerRow.info).userTelephone,
          userPassword: JSON.parse(this.drawerRow.info).userPassword,
          keyId: JSON.parse(this.drawerRow.info).keyId || '',
          userId: JSON.parse(this.drawerRow.info).userId || '',
          password: nfc.toUpperCase(), //this.voucher.nfc,
          passwordStartTime: moment(this.value2[0]).format('YYYYMMDDHHmmss'),
          passwordEndTime: moment(this.value2[1]).format('YYYYMMDDHHmmss'),
          is: false
        };
      } else if (documentType == 14) {
        if (this.voucher.password.length != 6) {
          this.$message.error("密码长度为6位")
          return false
        } else if (this.voucher.password.length == 0) {
          this.$message.error("请输入密码")
          return false
        }
        if (pzname == '') {
          pzname = '密码' + sort
        }
        str = {
          username: this.voucher.username,
          pzname: pzname,
          // imei: this.deviceList[0].imei,
          password: this.voucher.password,
          userTelephone: JSON.parse(this.drawerRow.info).userTelephone,
          userPassword: JSON.parse(this.drawerRow.info).userPassword,
          keyId: JSON.parse(this.drawerRow.info).keyId || '',
          userId: JSON.parse(this.drawerRow.info).userId || '',
          operateMode: 7,
          order: 6207,
          passwordStartTime: moment(this.value2[0]).format('YYYYMMDDHHmmss'),
          passwordEndTime: moment(this.value2[1]).format('YYYYMMDDHHmmss'),
          is: false,
        };
      }

      var data = {
        cardId: this.drawerRow.id,
        content: JSON.stringify(str),
        type: documentType,
        startTime: moment(this.value2[0]).valueOf() / 1000,
        endTime: moment(this.value2[1]).valueOf() / 1000
      };
      httpPost(data, this.$api.addCertificates).then((res) => {
        this.$message.success('添加成功')
        this.roomstatus1 = true;
        this.getcertificate();
      });
    },
    // 重新下发凭证
    Issue(index, row) {
      var data = {};
      var userTelephone = JSON.parse(row.content).userTelephone;
      var userPassword = JSON.parse(row.content).userPassword;
      var passwordEndTime = JSON.parse(row.content).passwordEndTime;
      var passwordStartTime = JSON.parse(row.content).passwordStartTime;
      var q = {
        deviceNum: row.deviceNum,
        lockType: 1
        // imei: row.imei
      };
      var data = {
        q: JSON.stringify(q),
        pageNum: 1,
        pageSize: 10,
      };
      this.$confirm("确定要重新下发吗？", "提示", {
        type: "warning",
      }).then(() => {
        httpPost(data, this.$api.getDeviceItems).then((res) => {
          if (res.data.list.length > 0) {
            if (res.data.list[0].manufactureId == 201 || res.data.list[0].manufactureId == 221) {
              if (row.type == 1) {
                var fpId = new Date();
                var fingerprint = JSON.parse(row.content).fingerprint;
                var pwd = JSON.parse(row.content).userPassword
                var startTime = JSON.stringify(row.startTime)
                var endTime = JSON.stringify(row.endTime)
                if (startTime.length == 13) {
                  startTime = Number(row.startTime / 1000)
                }
                if (endTime.length == 13) {
                  endTime = Number(row.endTime / 1000)
                }
                ICINLocker.addFingerPrints(row.deviceNum, row.imei, pwd, 0,
                  fingerprint, startTime,
                  endTime, (callback) => {
                    if (callback.success) {
                      var str1 = JSON.parse(row.content);
                      str1.fpTimeId = callback.serialNumber;
                      var updatedata = {
                        id: row.id,
                        content: JSON.stringify(str1),
                        serial: callback.serialNumber,
                      };
                      httpPost(updatedata, this.$api.updateCertificates)
                        .then(
                          (res2) => {
                          }
                        );
                      this.obtainVoucherIssuanceRecord()
                      this.$message.success(callback.msg)
                    } else {
                      this.$message.error(callback.msg)
                    }
                  })
              } else if (row.type == 2) {
                var pwd = JSON.parse(row.content).password
                var userid = JSON.parse(row.content).userPassword
                if (pwd.length != 16) {
                  this.$message.error("卡格式错误，请重新录入")
                  return
                }
                var startTime = JSON.stringify(row.startTime)
                var endTime = JSON.stringify(row.endTime)
                if (startTime.length == 13) {
                  startTime = Number(row.startTime / 1000)
                }
                if (endTime.length == 13) {
                  endTime = Number(row.endTime / 1000)
                }
                ICINLocker.RfCardRegister(row.deviceNum, row.imei, userid, 1, 1, pwd,
                  36,
                  startTime, endTime, 6210, (callback) => {
                    if (callback.success) {
                      var updatedata = {
                        id: row.id,
                        serial: callback.serialNumber,
                      };
                      httpPost(updatedata, this.$api.updateCertificates)
                        .then((
                          res) => {
                        });
                      this.$message.success(callback.msg)
                      this.obtainVoucherIssuanceRecord()
                    } else {
                      this.$message.error(callback.msg)
                      this.obtainVoucherIssuanceRecord()
                    }
                  })
              } else if (row.type == 3) {
                var pwd = JSON.parse(row.content).password
                var userid = JSON.parse(row.content).userPassword
                if (pwd.length != 8) {
                  this.$message.error("卡格式错误，请重新录入")
                  return
                }
                pwd = pwd + '00000000'
                var startTime = JSON.stringify(row.startTime)
                var endTime = JSON.stringify(row.endTime)
                if (startTime.length == 13) {
                  startTime = Number(row.startTime / 1000)
                }
                if (endTime.length == 13) {
                  endTime = Number(row.endTime / 1000)
                }
                ICINLocker.RfCardRegister(row.deviceNum, row.imei, userid, 1, 1, pwd,
                  50,
                  startTime, endTime, 6210, (callback) => {
                    if (callback.success) {
                      var updatedata = {
                        id: row.id,
                        serial: callback.serialNumber,
                      };
                      httpPost(updatedata, this.$api.updateCertificates)
                        .then((
                          res) => {
                        });
                      this.$message.success(callback.msg)
                      this.obtainVoucherIssuanceRecord()
                    } else {
                      this.$message.error(callback.msg)
                      this.obtainVoucherIssuanceRecord()
                    }
                  })
              } else if (row.type == 4) {
                var pwd = JSON.parse(row.content).password
                var userid = JSON.parse(row.content).userPassword
                var startTime = JSON.stringify(row.startTime)
                var endTime = JSON.stringify(row.endTime)
                if (startTime.length == 13) {
                  startTime = Number(row.startTime / 1000)
                }
                if (endTime.length == 13) {
                  endTime = Number(row.endTime / 1000)
                }
                ICINLocker.addForeverPassword(row.deviceNum, row.imei, userid, 1, pwd,
                  255,
                  startTime, endTime, 6207, (callback) => {
                    if (callback.success) {
                      var updatedata = {
                        id: row.id,
                        serial: callback.serialNumber,
                      };
                      httpPost(updatedata, this.$api.updateCertificates)
                        .then((
                          res) => {
                        });
                      this.$message.success(callback.msg)
                      this.obtainVoucherIssuanceRecord()
                    } else {
                      this.$message.error(callback.msg)
                      this.obtainVoucherIssuanceRecord()
                    }
                  })
              }
            } else if (res.data.list[0].manufactureId == 101) {
              if (row.type == 1) {
                var fpId = new Date();
                var fingerprint = JSON.parse(row.content).fingerprint;
                var str = {
                  imei: row.imei,
                  deviceNum: row.deviceNum,
                  userTelephone: userTelephone,
                  userPassword: userPassword,
                  password: JSON.parse(row.content).password,
                  length: fingerprint.length / 2,
                  fpTimeId: fpId.getTime(),
                  operateMode: 16,
                  order: 6216,
                  fingerprint: fingerprint,
                  fingerprintStartTime: passwordStartTime,
                  fingerprintEndTime: passwordEndTime,
                };
                httpPost(str, this.$api.fingerprintTransfer).then((res1) => {
                  if (res1.success) {
                    var str1 = JSON.parse(row.content);
                    str1.fpTimeId = str.fpTimeId;
                    var updatedata = {
                      id: row.id,
                      content: JSON.stringify(str1),
                      serial: res1.data.serialNumber,
                    };
                    httpPost(updatedata, this.$api.updateCertificates)
                      .then(
                        (res2) => {
                        }
                      );
                    this.$message.success("下发成功");
                    this.obtainVoucherIssuanceRecord()
                  } else {
                    this.$message.error("下发失败");
                    this.obtainVoucherIssuanceRecord()
                  }
                });
                this.$message.success("操作成功");
                return false;
              } else if (row.type == 2) {
                data = {
                  imei: row.imei,
                  deviceNum: row.deviceNum,
                  userTelephone: userTelephone,
                  cardId: row.cardId,
                  userPassword: userPassword,
                  password: JSON.parse(row.content).password,
                  operateMode: 13,
                  order: 6213,
                  passwordStartTime: passwordStartTime,
                  passwordEndTime: passwordEndTime,
                  is: false,
                };
              } else if (row.type == 3) {
                data = {
                  imei: row.imei,
                  deviceNum: row.deviceNum,
                  userTelephone: userTelephone,
                  cardId: row.cardId,
                  userPassword: userPassword,
                  password: JSON.parse(row.content).password,
                  operateMode: 10,
                  order: 6210,
                  passwordStartTime: passwordStartTime,
                  passwordEndTime: passwordEndTime,
                  is: false,
                };
              } else if (row.type == 4) {
                data = {
                  imei: row.imei,
                  deviceNum: row.deviceNum,
                  userTelephone: userTelephone,
                  cardId: row.cardId,
                  userPassword: userPassword,
                  password: JSON.parse(row.content).password,
                  operateMode: 7,
                  order: 6207,
                  passwordStartTime: passwordStartTime,
                  passwordEndTime: passwordEndTime,
                  is: false,
                };
              }
              httpPost(data, this.$api.getDeviceOperateUserInfo).then((res) => {
                if (res.success) {
                  var updatedata = {
                    id: row.id,
                    serial: res.data.serialNumber,
                  };
                  httpPost(updatedata, this.$api.updateCertificates).then((
                    res) => {
                  });
                  this.$message.success("下发成功");
                  this.obtainVoucherIssuanceRecord()
                } else {
                  this.$message.error("下发失败");
                  this.obtainVoucherIssuanceRecord()
                }
              });
            }
          } else {
            this.$message.error("未发现这个设备")
          }
        })
      })
    },


    // 解除绑定
    UnbindFun(index, row) {
      this.$confirm('是否只解除平台关系', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        var data = [{
          siteId: row.roomId,
          cardId: this.drawerRow.id,
        },];
        httpPost(data, this.$api.unbindCard).then((res) => {
          if (res.success) {
            this.getAboutRoom()
            setTimeout(() => {
              this.updateRoom()
            }, 500)
            this.screenRoom(this.drawerRow.id);
            this.$message.success("解绑成功")
          } else {
            this.$message.error("解绑失败")
          }
        })
      })
    },
    // 下载模板
    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)
    },
    exportBtn() {
      this.exportExcel()
    },
    exportExcel() {
      let sheet1data = [
        ['人员名称', '房间ID', '房间名称', '学工号', '卡号', '电话(为11位手机号码)', '性别(1为男，2为女)', '开锁方式(3为NFC,4为密码)',
          '内容(NFC为8位16进制物理卡号、密码为6位数字密码)'
        ]
      ]
      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')
    },

    hexStringToBuffer(hex) {
      let buffer = new ArrayBuffer(hex.length / 2);
      let byteStream = new Uint8Array(buffer);
      let i = 0;
      while (hex.length >= 2) {
        var x = parseInt(hex.substring(0, 2), 16);
        hex = hex.substring(2, hex.length);
        byteStream[i++] = x;
      }
      return byteStream;
    },
    // 采集指纹
    addfir() {
      let _this = this
      this.$refs.myChild.addFingerprintFun(0x8014, function (data) {
        localStorage.setItem('fingerprint', data)
        _this.localFingerprint = data
      })
    },
    async getFingerData() {
      let _this = this
      await this.$refs.myGetFinger.DetectFinger()
      await this.$refs.myGetFinger.getFingerData('', function (data) {
        console.log(data)
        localStorage.setItem('fingerprint', data.template)
        _this.localFingerprint = data.template
      })
    },
    setVoucherNfc(data) {
      if (data.cardType == 50) {
        var nfc = ""
        var str = data.cardNo.substr(0, 8)
        var arr4 = group(str, 2).reverse();
        arr4.map((li) => {
          nfc += li;
        });
        this.voucher.nfc = nfc.toUpperCase()
        console.log(this.voucher.nfc)
      } else if (data.cardType == 36) {
        this.voucher.idcard = data.cardNo.toUpperCase()
      }
    },
    writeNfc() {
      var _this = this
      this.$refs.myChild.writeCard(0x8011, function (data) {
        if (data.status == 0) {
          console.log(data)
        } else {
          console.log(data)
          _this.$message.error("写卡错误，请检查读卡器是否正常！")
        }
      })
    },
    addNfc() {
      var _this = this
      this.$refs.myChild.cardFun(0x8010, function (data) {
        if (data.status == 0) {
          console.log(data)
          _this.setVoucherNfc(data)
        } else {
          _this.$message.error("读卡错误，请检查读卡器是否正常！")
        }
      })
    },
    // input视图刷新
    changesr(e) {
      this.$forceUpdate();
    },
    // 加入信息库
    addInformationBase(index, row) {
      var info = JSON.parse(row.content);
      var obj = {},
        content = {},
        arr = [];
      content["type"] = row.type;
      content["order"] = info.order;
      content["cardId"] = info.cardId;
      content["pzname"] = info.pzname;
      if (row.type == 1) {
        content["content"] = info.fingerprint;
      } else {
        content["content"] = info.password;
      }
      content["operateMode"] = info.operateMode;
      content["userPassword"] = info.userPassword;
      content["userTelephone"] = info.userTelephone;
      content["length"] = info.length;
      obj.cardId = this.drawerRow.id;
      obj.content = JSON.stringify(content);
      arr.push(obj);
      var data = {
        list: arr,
      };
      httpPost(data, this.$api.addMark).then((res) => {
        if (res.success) {
          this.$message.success("操作成功");
        }
      });
    },
    //多选删除房间数据
    selectRoomdelete(val) {
      this.selectRoomdeletelist = val;
    },
    // 清理房间
    qlfj() {
      var info = JSON.parse(this.drawerRow.info);
      var info1 = {
        roomIds: [],
        userPassword: info.userPassword,
        userTelephone: info.userTelephone,
      };
      var data1 = {
        id: this.drawerRow.id,
        info: JSON.stringify(info1),
      };
      httpPost(data1, this.$api.updateCard).then((res) => {
      });
    },
    // 退租
    rentWithdrawal(index, row) {
      this.batchRenewalList = [row]
      this.batchLeaseback()
    },
    // 删除房间
    deleteRoomfun(index, row) {
      var that = this
      var resultArr = this.AboutDevice.filter((_item) => _item.roomId == row.roomId)[0];
      console.log(resultArr, this.drawerRow.id)
      if (resultArr) {
        RequestSet.unbindPeopleAndRooms(this.drawerRow.id, resultArr.imei, (callback) => {
          if (callback.success) {
            let dataOne = utils.zlib_unzip(callback.data)
            if (dataOne.length > 0) {
              var data = dataOne[0]
              if (data.status == 0) {
                that.$message.error("该房间正在下发此用户,不能删除！")
              } else if (data.status == 1) {
                that.deleteRelationshipBetweenPersonnelAndRoom(index, row)
                that.getcheckInList()
                that.updateRoom()
              } else if (data.status == 703) {
                that.deleteRelationshipBetweenPersonnelAndRoom(index, row)
                that.getcheckInList()
              } else {
                that.deleteRelationshipBetweenPersonnelAndRoom(index, row)
                that.updateRoom()
              }
            } else {
              that.deleteRelationshipBetweenPersonnelAndRoom(index, row)
              that.getcheckInList()
              that.updateRoom()
            }
          } else {
            that.deleteRelationshipBetweenPersonnelAndRoom(index, row)
            that.getcheckInList()
            that.updateRoom()
          }
        })
      } else {
        that.deleteRelationshipBetweenPersonnelAndRoom(index, row)
        that.getcheckInList()
        that.updateRoom()
      }
    },
    deleteRelationshipBetweenPersonnelAndRoom(index, row) {
      var info = JSON.parse(this.drawerRow.info);
      var data = [{
        siteId: row.roomId,
        cardId: this.drawerRow.id,
      },];
      httpPost(data, this.$api.unbindCard).then((res) => {
        if (res.success) {
          var array = this.roomtable,
            SelectedList = [],
            roomtable = [];
          this.roomtable.map((item, Index) => {
            if (item.roomId == row.roomId) {
              array.splice(Index, 1);
            }
          });
          array.map((li) => {
            SelectedList.push(li.roomId);
          });
          this.getcheckInList()
          this.getAboutRoom()
          setTimeout(() => {
            this.updateRoom()
          }, 500)
          // this.roomtablestatus = false
          this.selectRoom = false
          this.$nextTick(function () {
            this.SelectedList = SelectedList;
            this.roomtable = roomtable;
            this.selectRoom = true
            // this.roomtablestatus = true
          });
          var resultArr = this.AboutDevice.filter(
            (_item) => _item.roomId == row.roomId
          )[0];
          if (resultArr) {
            if (resultArr.imei) {
              if (resultArr.manufactureId == 201 || resultArr.manufactureId == 221) {
                var data = {
                  lockerId: resultArr.deviceNum,
                  imei: resultArr.imei,
                  lockerUserId: info.userPassword,
                  keyId: info.userPassword,
                  role: 0,
                  action: 2, //1--添加、2--删除、3--修改
                  order: 6203,
                  cardName: this.drawerRow.name,
                  roomName: resultArr.roomName
                }
                httpPost(data, this.$api.ZGduserOperation).then(res => {
                  if (res.success) {
                    this.$message.success('删除用户成功')
                  } else {
                    this.$message.error(res.msg)
                  }
                })
              } else if (resultArr.manufactureId == 101) {
                var str = {
                  imei: resultArr.imei,
                  deviceNum: resultArr.deviceNum,
                  userTelephone: info.userTelephone,
                  userPassword: info.userPassword,
                  operateMode: 3,
                  order: 6203,
                  password: "20210816",
                  cardName: this.drawerRow.name,
                  roomName: resultArr.roomName,
                  is: false,
                };
                httpPost(str, this.$api.getDeviceOperateUserInfo).then(
                  (res1) => {
                    if (res1.success) {
                      this.$message.success("删除用户成功");
                    } else {
                      this.$message.error(res1.msg);
                    }
                  }
                );
              }
            }
          }
          this.screenRoom(this.drawerRow.id);
          this.$message.success("解绑房间成功");
        }
      });
    },
    getRandomNumber(n) {
      var arr = new Array(n); //用于存放随机数
      var randomNumber = ""; //存放随机数
      for (i = 0; i < arr.length; i++) arr[i] = parseInt(Math.random() * 10);
      var flag = 0;
      for (i = 0; i < arr.length - 1; i++) {
        for (j = i + 1; j < arr.length; j++) {
          if (arr[i] == arr[j]) {
            flag = 1;
            break;
          }
        }
        if (flag) break;
      }
      for (var i = 0; i < arr.length; i++) {
        randomNumber += arr[i];
      }
      return randomNumber;
    },
    // 修改凭证
    modifyCraiFun() {
      var that = this;
      var row = this.modifyrow;
      var content = JSON.parse(row.content);
      var passwordStartTime = moment(this.value2[0].getTime()).format('YYYYMMDDHHmmss')
      var passwordEndTime = moment(this.value2[1].getTime()).format('YYYYMMDDHHmmss')
      content.pzname = that.certificatesContent.pzname
      content.passwordStartTime = passwordStartTime
      content.passwordEndTime = passwordEndTime
      var updatedata = {
        id: row.id,
        content: JSON.stringify(content),
        startTime: this.value2[0].getTime() / 1000,
        endTime: this.value2[1].getTime() / 1000
      };
      httpPost(updatedata, that.$api.updateCertificates)
        .then((res2) => {
          that.getcertificate();
          that.certificatestatus = false;
        });
    },
    modifyCrai(index, row) {
      this.modifyrow = row;
      var content = JSON.parse(row.content);
      this.documentType1 = row.type;
      this.certificatesContent.username = content.username;
      this.certificatesContent.pzname = content.pzname;
      this.certificatesContent.password = content.password;
      var passwordStartTime = '',
        passwordEndTime = ''
      if (row.startTime && row.endTime) {
        var str1 = JSON.stringify(row.startTime)
        var str2 = JSON.stringify(row.endTime)
        if (str1.length == 13 && str2.length == 13) {
          passwordStartTime = moment(row.startTime).format('YYYY-MM-DD HH:mm:ss')
          passwordEndTime = moment(row.endTime).format('YYYY-MM-DD HH:mm:ss')
        } else if (str1.length == 10 && str2.length == 10) {
          passwordStartTime = moment(row.startTime * 1000).format('YYYY-MM-DD HH:mm:ss')
          passwordEndTime = moment(row.endTime * 1000).format('YYYY-MM-DD HH:mm:ss')
        }
      } else if (!row.deviceNum.indexOf('yxwl')) {
        passwordStartTime = this.insertStr(content.endTime, "-");
        passwordEndTime = this.insertStr(content.passwordEndTime, "-");
      }
      this.modifyStatus = false;
      this.$nextTick(function () {
        this.modifyvalue2[0] = passwordStartTime;
        this.modifyvalue2[1] = passwordEndTime;
        this.modifyStatus = true;
      });
      this.certificatestatus = true;
    },
    insertStr(soure, newStr) {
      return (
        soure.slice(0, 4) +
        newStr +
        soure.slice(4, 6) +
        newStr +
        soure.slice(6, 8) +
        " " +
        soure.slice(8, 10) +
        ":" +
        soure.slice(10, 12) +
        ":" +
        soure.slice(12, 14)
      );
    },
    //所选房源
    handleCheckChange() {
      this.selectkey = this.$refs.tree.getCheckedKeys();
    },
    // 房源添加
    handleCheckChangeadd() {
      this.selectkeyadd = this.$refs.tree2.getCheckedKeys();
    },
    //所选房源
    handleCheckChange1() {
      this.selectkey1 = this.$refs.tree1.getCheckedKeys();
    },
    markFun(e) {
      var info = this.tableData[e];
      this.documentType = info.type;
      if (info.type == 1) {
        localStorage.setItem("fingerprint", info.content);
      } else if (info.type == 2) {
        this.voucher.idcard = info.content;
      } else if (info.type == 3) {
        this.voucher.nfc = info.content;
      } else if (info.type == 4) {
        this.voucher.password = info.content;
      }
    },
    //   获取信息库
    getOperates(id) {
      // var data = {
      //   q: JSON.stringify({
      //     cardId: id,
      //   }),
      // };
      // httpGet(data, this.$api.getMark).then((res) => {
      //   var array = [];
      //   res.data.map((li) => {
      //     var str = JSON.parse(li.content);
      //     str.id = li.id;
      //     str.cardId = li.cardId;
      //     array.push(str);
      //   });
      //   this.tableData = array;
      // });
    },
    // 人脸图片上传功能
    handleRemove(file) {
      console.log(file);
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible1 = true;
    },
    handleDownload(file) {
      console.log(file);
    },
    selectCheck(e) {
      if (e == "左手大拇指") {
        this.fingerprintId = 0;
      } else if (e == "左手食指") {
        this.fingerprintId = 1;
      } else if (e == "右手大拇指") {
        this.fingerprintId = 2;
      } else if (e == "右手食指") {
        this.fingerprintId = 3;
      }
    },
    // 分页
    handleSizeChange1(val) {
      this.pageSize1 = val
      this.obtainVoucherIssuanceRecord();
    },
    handleCurrentChange1(val) {
      this.currentPage1 = val
      this.obtainVoucherIssuanceRecord();
    },
    getlistNum1(val, size) {
      var dataall = {
        pageNum: 0,
        pageSize: 0,
        orderBy: "create_at desc",
        q: {
          cardId: this.drawerRow.id,
          deviceNum: this.credentialSearch.deviceNum,
          imei: this.credentialSearch.imei,
          inStatus: "0,1,702",
          types: "0,1,2,3,4"
        },
      }
      httpGet(dataall, this.$api.getCertificates).then((resall) => {
        if (resall.code == 200) {
          var sendOn = utils.zlib_unzip(resall.data)
          var sendstatus = true
          if (resall.data.total == 0) {
            sendstatus = false
          }
          var data = {
            pageNum: this.currentPage1,
            pageSize: this.pageSize1,
            orderBy: "create_at desc",
            q: {
              cardId: this.drawerRow.id,
              type: '1,2,3,4'
            },
          };
          httpGet(data, this.$api.getCertificates).then((res) => {
            var certiflist = utils.zlib_unzip(res.data);
            var AboutDevice = this.allAboutDevice;
            certiflist.map((li) => {
              li['color'] = '1'
              var licontent = JSON.parse(li.content).password
              var filterResult = sendOn.filter(item => JSON.parse(item.content).password == licontent)
              if (sendstatus && filterResult && filterResult.length > 0) {
                var statusOne = filterResult.some(item => item.status == 0)
                var statusTwo = filterResult.some(item => item.status == 1)
                var statusThree = filterResult.some(item => item.status == 702)
                if (statusOne) {
                  li['color'] = '0'
                } else if (!statusOne && !statusThree && statusTwo) {
                  li['color'] = '1'
                } else if (!statusOne && statusThree) {
                  li['color'] = '702'
                } else {
                  li['color'] = '999'
                }
              }
              li.createAt = this.time(+new Date(li.createAt));
              li.userTelephone = JSON.parse(li.content).userTelephone;
              li.pzname = JSON.parse(li.content).pzname;
              li['startTimeText'] = utils.formatTime(li.startTime)
              li['endTimeText'] = utils.formatTime(li.endTime)
              li['data'] = JSON.parse(li.content).password
              if (li.type == 1) {
                li['data'] = li.id
              }
              if (li.pzname) {
                var statusif = li.pzname.indexOf('蓝牙') || -1
                if (statusif) {
                  li['DeletePermissions'] = true
                } else {
                  if (li.type != 11) {
                    li['DeletePermissions'] = true
                  } else {
                    li['DeletePermissions'] = false
                  }
                }
              } else {
                li['DeletePermissions'] = false
              }
            });
            var array = utils.uniqueArray(certiflist, "data");
            this.roomtable1 = certiflist;
            this.total1 = res.data.total;
          });
        }
      })
    },
    // 获取指纹id
    getfiId(row, callback) {
      var content = JSON.parse(row.content);
      var data = {
        q: JSON.stringify({
          serial: row.serial,
        }),
        pageNum: 1,
        pageSize: 10,
      };
      httpPost(data, this.$api.getDeviceResult).then((res) => {
        let datalist = utils.zlib_unzip(res.data)
        callback(datalist);
      });
    },
    // 获取指纹id
    getfiId1(row, callback) {
      var data = {
        q: JSON.stringify({
          serial: row.serial
        }),
        pageNum: 1,
        pageSize: 10,
      };
      httpPost(data, this.$api.getDeviceResult).then((res) => {
        let datalist = utils.zlib_unzip(res.data)
        callback(datalist);
      });
    },
    // 批量删除凭证
    deleAll() {
      // console.log(this.multipleSelection4)
      // return
      var multipleSelection4 = this.multipleSelection4
      this.$confirm("确定要删除吗？", "提示", {
        type: "warning",
      }).then(() => {
        multipleSelection4.map((li, index) => {
          this.deletefun2(index, li)
        })
      });
    },
    // 删除凭证操作
    deletefun2(index, row) {
      // 二次确认删除
      var ids = this.roomtable;
      var that = this;
      var str = {};

      var q = {
        deviceNum: row.deviceNum,
        imei: row.imei,
        lockType: 1
      };
      var data = {
        q: JSON.stringify(q),
        pageNum: 1,
        pageSize: 10,
      };
      httpPost(data, this.$api.getDeviceItems).then((res) => {
        if (res.data.list.length > 0) {
          var cardName = row.name + '-' + JSON.parse(row.content).pzname
          if (res.data.list[0].manufactureId == 201 || res.data.list[0].manufactureId == 221) {
            if (row.type == 1) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  ICINLocker.delFingerPrints(row.deviceNum, row.imei,
                    JSON.parse(row.content).userPassword, 2, data[
                      0].face, 0, row.startTime, row.endTime, cardName, res
                        .data.list[0].roomName, (
                          callback) => {
                    if (callback.success) {
                      var content = JSON.parse(row.content)
                      content.operateMode = 18
                      var updatedata = {
                        id: row.id,
                        status: 0,
                        content: JSON.stringify(content),
                        // serial: callback.data.serialNumber,
                      };
                      httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                      });
                      that.$message.success("删除成功！");
                    } else {
                      that.$message.error(callback.msg)
                    }
                  })
                } else {
                  that.$message.success("未找到对应锁上凭证记录");
                }
              })
            } else if (row.type == 2) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  if (JSON.parse(row.content).password.length != 16) {
                    this.$confirm("卡格式错误，请重新录入", "提示", {
                      type: "warning",
                    })
                      .then(() => {

                      })
                  } else {
                    ICINLocker.delCardRegister(row.deviceNum, row.imei,
                      JSON.parse(row.content).userPassword, 2, 1,
                      JSON.parse(row.content).password, 36, row
                      .startTime, row.endTime, 6212, data[0]
                      .face, cardName, res.data.list[0].roomName, (
                        callback) => {
                      if (callback.success) {
                        var content = JSON.parse(row.content)
                        content.operateMode = 15
                        var updatedata = {
                          id: row.id,
                          status: 0,
                          content: JSON.stringify(content),
                          // serial: callback.data.serialNumber,
                        };
                        httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                        });
                        that.$message.success("删除成功！");
                      } else {
                        that.$message.error(callback.msg)
                      }
                    })
                  }
                } else {
                  that.$message.success("未找到对应锁上凭证记录");
                }
              })
            } else if (row.type == 3) {
              this.getfiId1(row, function (data) {
                console.log(data)
                if (data.length > 0) {
                  if (JSON.parse(row.content).password.length != 8) {
                    this.$confirm("卡格式错误，是否删除重新录入", "提示", {
                      type: "warning",
                    })
                      .then(() => {
                        var data = {
                          ids: [row.id],
                        };
                        httpPost(data, that.$api
                          .deleteCertificates).then((
                            res) => {
                            if (res.success) {
                              that.$message.success(
                                "删除成功！");
                              that.getcertificate();
                            }
                          });
                      })
                  } else {
                    ICINLocker.delCardRegister(row.deviceNum, row.imei,
                      JSON.parse(row.content).userPassword, 2, 1,
                      JSON.parse(row.content).password, 50, row
                      .startTime, row.endTime, 6212, data[0]
                      .face, cardName, res.data.list[0].roomName, (
                        callback) => {
                      if (callback.success) {
                        var content = JSON.parse(row.content)
                        content.operateMode = 12
                        var updatedata = {
                          id: row.id,
                          status: 0,
                          content: JSON.stringify(content),
                          // serial: callback.data.serialNumber,
                        };
                        httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                        });
                        that.$message.success("删除成功！");
                      } else {
                        that.$message.error(callback.msg)
                      }
                    })
                  }
                } else {
                  that.$message.success("未找到对应锁上凭证记录");
                }
              })
            } else if (row.type == 4) {
              this.getfiId1(row, function (data) {
                if (data.length > 0) {
                  ICINLocker.delForeverPassword(row.deviceNum, row.imei,
                    JSON.parse(row.content).userPassword, 2, JSON
                      .parse(row.content).password, 255, row
                    .startTime, row.endTime, 6209, data[0].face, cardName, res
                      .data.list[0].roomName, (
                        callback) => {
                    if (callback.success) {
                      var content = JSON.parse(row.content)
                      content.operateMode = 9
                      var updatedata = {
                        id: row.id,
                        status: 0,
                        content: JSON.stringify(content),
                        // serial: callback.data.serialNumber,
                      };
                      httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                      });
                      that.$message.success("删除成功！");
                    } else {
                      that.$message.error(callback.msg)
                    }
                  })
                } else {
                  that.$message.success("未找到对应锁上凭证记录");
                }
              })
            }
          } else if (res.data.list[0].manufactureId == 101) {
            if (row.type == 1) {
              this.getfiId(row, function (data) {
                if (data.length > 0) {
                  var fpid = "";
                  if (data[0].face) {
                    fpid = data[0].face.toString(16);
                    if (fpid.length != 2) {
                      fpid = "0" + fpid;
                    }
                  } else {
                    if (data[0].face == 0) {
                      fpid = data[0].face.toString(16);
                      fpid = "0" + fpid;
                    }
                  }
                  str = {
                    imei: row.imei,
                    deviceNum: row.deviceNum,
                    userTelephone: JSON.parse(row.content).userTelephone,
                    operateMode: 18,
                    order: 6218,
                    password: fpid,
                    userPassword: JSON.parse(row.content).userPassword,
                    is: false,
                    passwordStartTime: JSON.parse(row.content)
                      .passwordStartTime,
                    passwordEndTime: JSON.parse(row.content).passwordEndTime,
                    cardName: cardName,
                    roomName: res.data.list[0].roomName
                  };
                  if (JSON.parse(row.content).pass) {
                    str['pass'] = true
                  } else {
                    str['pass'] = false
                  }
                  httpPost(str, that.$api.getDeviceOperateUserInfo).then(
                    (res1) => {
                      if (res1.success) {
                        var content = JSON.parse(row.content)
                        content.operateMode = str.operateMode
                        var updatedata = {
                          id: row.id,
                          status: 0,
                          content: JSON.stringify(content),
                          // serial: res1.data.serialNumber,
                        };
                        httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                        });
                        that.$message.success("删除成功！");
                      }
                    });
                } else {
                  that.$message.success("未找到对应锁上凭证记录");
                }
              });
              return false;
            } else if (row.type == 2) {
              str = {
                imei: row.imei,
                deviceNum: row.deviceNum,
                userTelephone: JSON.parse(row.content).userTelephone,
                operateMode: 15,
                order: 6215,
                password: JSON.parse(row.content).password,
                userPassword: JSON.parse(row.content).userPassword,
                is: false,
                passwordStartTime: JSON.parse(row.content).passwordStartTime,
                passwordEndTime: JSON.parse(row.content).passwordEndTime,
                cardName: cardName,
                roomName: res.data.list[0].roomName
              };
            } else if (row.type == 3) {
              str = {
                imei: row.imei,
                deviceNum: row.deviceNum,
                userTelephone: JSON.parse(row.content).userTelephone,
                operateMode: 12,
                order: 6212,
                password: JSON.parse(row.content).password,
                userPassword: JSON.parse(row.content).userPassword,
                is: false,
                passwordStartTime: JSON.parse(row.content).passwordStartTime,
                passwordEndTime: JSON.parse(row.content).passwordEndTime,
                cardName: cardName,
                roomName: res.data.list[0].roomName
              };
            } else if (row.type == 4) {
              str = {
                imei: row.imei,
                deviceNum: row.deviceNum,
                userTelephone: JSON.parse(row.content).userTelephone,
                operateMode: 9,
                order: 6209,
                userPassword: JSON.parse(row.content).userPassword,
                password: JSON.parse(row.content).password,
                is: false,
                passwordStartTime: JSON.parse(row.content).passwordStartTime,
                passwordEndTime: JSON.parse(row.content).passwordEndTime,
                cardName: cardName,
                roomName: res.data.list[0].roomName
              };
            }
            if (JSON.parse(row.content).pass) {
              str['pass'] = true
            } else {
              str['pass'] = false
            }
            httpPost(str, that.$api.getDeviceOperateUserInfo).then((res1) => {
              if (res1.success) {
                var content = JSON.parse(row.content)
                content.operateMode = str.operateMode
                var updatedata = {
                  id: row.id,
                  status: 0,
                  content: JSON.stringify(content),
                  // serial: res1.data.serialNumber,
                };
                httpPost(updatedata, that.$api.updateCertificates).then((res) => {

                });
                that.$message.success("删除成功！");
              }
            });
          }
        } else {
          // var data = {
          // 	ids: [row.id],
          // };
          // httpPost(data, that.$api.deleteCertificates).then((
          // 	res) => {
          // 	if (res.success) {
          // 		that.$message.success("删除成功！");
          // 		that.getcertificate();
          // 	}
          // });
          that.$message.error("未找到锁上对应凭证ID");
        }
      })
    },
    deletefun1(index, row) {
      var that = this
      this.$confirm("此操作将删除凭证记录，请确认！", "提示", {
        type: "warning",
      }).then(() => {
        let pzid = []
        pzid.push(row.id)
        if (row.type == 11) {
          var pzname = JSON.parse(row.content).pzname
          var data6 = {
            pageNum: 1,
            pageSize: 10,
            orderBy: "create_at desc",
            q: JSON.stringify({
              info: {
                pzname: pzname
              },
              cardId: this.drawerRow.id,
              inStatus: "0,1,702",
              type: 1
            }),
          };
          httpGet(data6, this.$api.getCertificates).then((res) => {
            let dataOne = utils.zlib_unzip(res.data)
            if (dataOne.length > 0) {
              this.$message.error("请先删除锁上凭证")
            } else {
              var data = {
                ids: pzid,
              };
              httpPost(data, that.$api
                .deleteCertificates).then((
                  res) => {
                  if (res.success) {
                    that.$message.success("删除成功！");
                    that.getcertificate();
                  }
                });
            }
          })
        } else {
          var password = JSON.parse(row.content).password
          var data6 = {
            pageNum: 1,
            pageSize: 10,
            orderBy: "create_at desc",
            q: JSON.stringify({
              info: {
                password: password
              },
              cardId: this.drawerRow.id,
              inStatus: "0,1,702",
              types: "0,1,2,3,4"
            }),
          };
          httpGet(data6, this.$api.getCertificates).then((res) => {
            let dataOne = utils.zlib_unzip(res.data)
            if (dataOne.length > 0) {
              this.$message.error("请先删除锁上凭证")
            } else {
              var data = {
                ids: pzid,
              };
              httpPost(data, that.$api
                .deleteCertificates).then((
                  res) => {
                  if (res.success) {
                    that.$message.success(
                      "删除成功！");
                    that.getcertificate();
                  }
                });
            }

          })
        }
      })
    },
    getArrDifference(arr1, arr2) {
      return arr1.concat(arr2).filter(function (v, i, arr) {
        return arr.indexOf(v) === arr.lastIndexOf(v);
      });
    },
    bindsave2() {
      var SelectedList = [];
      this.roomtable.map((li) => {
        SelectedList.push(li.roomId);
      });
      this.SelectedList = SelectedList;
      this.addroomstatus = !this.addroomstatus;
    },
    putCarfid1(resultArr, row) {
      var data = {};
      var userTelephone = JSON.parse(row.content).userTelephone;
      var userPassword = JSON.parse(row.content).userPassword;
      var passwordEndTime = JSON.parse(row.content).passwordEndTime;
      var passwordStartTime = JSON.parse(row.content).passwordStartTime;
      if (row.type == 1) {
        var fpId = new Date();
        var fingerprint = JSON.parse(row.content).fingerprint;
        var str = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          length: fingerprint.length / 2,
          fpTimeId: fpId.getTime(),
          operateMode: 16,
          order: 6216,
          fingerprint: fingerprint,
          fingerprintStartTime: passwordStartTime,
          fingerprintEndTime: passwordEndTime,
        };
        httpPost(str, this.$api.fingerprintTransfer).then((res1) => {
          var updatedata = {
            id: row.id,
            serial: res1.data.serialNumber,
          };
          httpPost(updatedata, that.$api.updateCertificates).then((res2) => {
          });
        });
        return false;
      } else if (row.type == 2) {
        data = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 13,
          order: 6213,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          is: false,
        };
      } else if (row.type == 3) {
        data = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 10,
          order: 6210,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          is: false,
        };
      } else if (row.type == 4) {
        data = {
          imei: resultArr.imei,
          deviceNum: resultArr.deviceNum,
          userTelephone: userTelephone,
          cardId: row.cardId,
          userPassword: userPassword,
          password: JSON.parse(row.content).password,
          operateMode: 7,
          order: 6207,
          passwordStartTime: passwordStartTime,
          passwordEndTime: passwordEndTime,
          is: false,
        };
      }
      httpPost(data, this.$api.getDeviceOperateUserInfo).then((res1) => {
        if (res1.success) {
          var updatedata = {
            id: row.id,
            serial: res1.data.serialNumber,
          };
          httpPost(updatedata, that.$api.updateCertificates).then((res2) => {
          });
        }
      });
    },
    // 转换标准时间
    getbztime(time) {
      var d = new Date(time);
      var mon =
        d.getMonth() + 1 < 10 ? "0" + (d.getMonth() + 1) : d.getMonth() + 1;
      var day = d.getDate() < 10 ? "0" + d.getDate() : d.getDate();
      var hour = d.getDate() < 10 ? "0" + d.getDate() : d.getDate();
      var min = d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes();
      var secon = d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds();
      var datetime =
        d.getFullYear() +
        "" +
        mon +
        "" +
        day +
        "" +
        hour +
        "" +
        min +
        "" +
        secon;
      return datetime;
    },
    time(time = +new Date()) {
      var date = new Date(time + 8 * 3600 * 1000); // 增加8小时
      return date.toJSON().substr(0, 19).replace("T", " ");
    },
    Bytes2Str(arrBytes) {
      var str = "";
      for (var i = 0; i < arrBytes.length; i++) {
        var tmp;
        var num = parseInt(arrBytes[i]);
        if (num < 0) {
          //此处填坑，当byte因为符合位导致数值为负时候，需要对数据进行处理
          tmp = (255 + num + 1).toString(16);
        } else {
          tmp = num.toString(16);
        }
        if (tmp.length == 1) {
          tmp = "0" + tmp;
        }
        if (i > 0) {
          str += "" + tmp;
        } else {
          str += tmp;
        }
      }
      return str;
    },
    // 选择绑定房间
    onClick(evt, treeId, treeNode) {
      // 点击事件
      this.treedata = treeNode;
      this.getItems(treeNode.id);
      this.getlist();
    },
    getItems(id) {
      if (id) {
        var t = {
          roomIds: [id],
          lockType: 1
        };
        var data = {
          q: JSON.stringify(t),
        };
        httpPost(data, this.$api.getDeviceItems).then((res) => {
          if (res.data.list.length == 0) {
            // this.$message.error("该房间还未绑定门锁");
            // this.bindroomstatus = false;
          } else {
            this.deviceList = res.data.list;
          }
        });
      } else {
        this.bindroomstatus = false;
        // this.$message({
        //   message: "该人员还未绑定房间",
        //   type: "error",
        //   customClass: "zZindex",
        // });
      }
    },
    // tabs标签页切换
    handleClick(tab, event) {
    },
    // 侧边栏添加绑定房间
    bindroom() {
      this.roomstatus = !this.roomstatus;
      this.addroomstatus = true;
    },
    addroom() {
      var array = this.roomtable,
        SelectedList = []
      array.map((li) => {
        SelectedList.push(li.roomId);
      });
      console.log(SelectedList)
      this.SelectedList = SelectedList
      this.roomstatus = !this.roomstatus;
      this.addroomstatus = false;
    },
    bindroom1() {
      this.roomstatus1 = !this.roomstatus1;
      var nfc = ''
      var arr2 = dec2hex(this.drawerRow.cardId);
      var arr4 = group(arr2, 2).reverse()
      arr4.map((li) => {
        nfc += li;
      });
      if (nfc.length != 8) {
        this.voucher.nfc = ""
      } else {
        this.voucher.nfc = nfc.toUpperCase()
      }
    },
    // 关闭侧边栏
    handleClose() {
      this.drawer = false;
      this.drawerVisible = false
      this.personname = ''
    },
    screenRoom1(id, callback) {
      // httpGet("", this.$api.onlyTenant).then((res) => {
      //   var roomAbout = res.data.list;
      //   var roomtable = [];
      //   roomAbout.map((li) => {
      //     if (li.cardId == id) {
      //       roomtable.push(li);
      //     }
      //   });
      //   callback(roomtable)
      // });
      var roomAbout = this.$store.state.roomAbout;
      var roomtable = [];
      roomAbout.map((li) => {
        var name = utils.findIndexArray(this.$store.state.zNodes, li.roomId, [])
        var path = ''
        if (name) {
          path = name.join('/')
        }
        li.roomName = path
        if (li.cardId == id) {
          roomtable.push(li);
        }
      });
      console.log(roomtable)
      callback(roomtable)
    },
    returnScreenRoom(id) {
      var roomAbout = this.$store.state.roomAbout;
      var SelectedList = [],
        roomtable = [];
      roomAbout.map((li) => {
        var name = utils.findIndexArray(this.$store.state.zNodes, li.roomId, [])
        var path = ''
        if (name) {
          path = name.join('/')
        }
        li.roomName = path
        if (li.cardId == id) {
          if (li.layout) {
            SelectedList.push(li.roomId);
          }
          let result = this.checkInListing.filter(item => item.siteId == li.roomId)[0]
          let deviceResult = this.allAboutDevice.filter(it => it.roomId == li.roomId)[0]
          if (result) {
            li['endTime'] = moment(result.endTime).format("YYYY-MM-DD HH:mm:ss") || ''
            li['startTime'] = moment(result.startTime).format("YYYY-MM-DD HH:mm:ss") || ''
            li['name'] = result.name
            li.card = li.cardId
          }
          if (deviceResult) {
            li['deviceNum'] = deviceResult.deviceNum
            li['imei'] = deviceResult.imei
            li['manufactureId'] = deviceResult.manufactureId
          }
          roomtable.push(li);
        }
      });
      return roomtable;
      // this.roomtable=roomtable
    },
    getAboutDevice1() {
      var data = {
        pageNum: 0,
        pageSize: 0,
        q: JSON.stringify({
          lockType: 1
        })
      };
      httpPost(data, this.$api.getDeviceItems).then((res) => {
        this.allAboutDevice = res.data.list;
      });
    },
    oninput(e) {
      var str = Number(e).toString(2);
      var str1 = Number(str);
      var str3 = Number(str1).toString(16);
    },
    downloadItem(url) {
      axios.get(url, {
        responseType: "blob"
      }).then(({
        data
      }) => {
        let blob = new Blob([data], {
          type: "application/vnd.ms-excel"
        });
        let link = document.createElement("a");
        link.href = window.URL.createObjectURL(blob);
        link.download = url.split("/").pop();
        // for IE
        if (navigator.msSaveBlob) {
          navigator.msSaveBlob(blob, "SPU_templateV1.1.xlsx");
        }
        link.click().catch(error => {
          console.error(error);
        });
      });
    },
    getallstatus(para) {
      var data3 = {
        code: "operateUserInfo/status",
        data: {
          para: para,
        },
      };
      var userlistquery = this.userlistquery;
      httpPost(data3, this.$api.sendCommand).then((res4) => {
        this.userlistquery1 = res4.data;
      });
    },
    activeiconfun(t) {
      this.activeiconfont = t;
    },
    handleSizeChange(val) {
      // console.log(`每页 ${val} 条`);
      this.getlistNum(0, val);
    },

    handleCurrentChange(val) {
      // console.log(`当前页: ${val}`);
      this.getlistNum(val, 10);
      this.$store.commit("increment", val);
    },
    // 分页
    handleSizeChange2(val) {
      this.pageSize2 = val
      this.getlistNum2(0, val);
    },
    handleCurrentChange2(val) {
      this.currentPage2 = val
      // console.log(`当前页: ${val}`);
      this.getlistNum2(val, 10);
    },
    getlistNum2(val, size) {
      var data = {
        pageNum: this.currentPage2,
        pageSize: this.pageSize2,
        orderBy: "create_at desc",
        q: {
          cardId: this.drawerRow.id,
        },
      };
      httpGet(data, this.$api.getCertificates).then((res) => {
        var certiflist = utils.zlib_unzip(res.data)
        var AboutDevice = this.allAboutDevice;
        certiflist.map((li) => {
          li.createAt = this.time(+new Date(li.createAt));
          li.userTelephone = JSON.parse(li.content).userTelephone;
          li.pzname = JSON.parse(li.content).pzname;
          li['statusText'] = utils.statusCode(li.status)
          li['startTimeText'] = utils.formatTime(li.startTime)
          li['endTimeText'] = utils.formatTime(li.endTime)
          var resultArr = AboutDevice.filter(
            (_item) => _item.imei == li.imei
          )[0];
          if (resultArr) {
            li.roomId = resultArr.id;
            li.roomName = resultArr.roomName;
          } else {
            li.roomId = "";
            li.roomName = "";
          }
        });
        this.roomtable2 = certiflist;
        this.total2 = res.data.total;
      });
    },
    getlistNum(val, size) {
      var q = {
        // type: 0,
        name: this.query.name,
      };
      var data = {
        pageNum: val,
        pageSize: size,
        orderBy: "create_time desc",
        q: JSON.stringify(q),
      };
      let roomAbout = this.$store.state.roomAbout
      httpPost(data, this.$api.getlistNum).then((res1) => {
        if (res1.success) {
          // let para = [];
          // res1.data.list.map((li, index) => {
          //   let userTelephone = JSON.parse(li.info) ? JSON.parse(li.info).userTelephone : ''
          //   let str = {
          //     imei: li.imei,
          //     userTelephone: userTelephone,
          //     password: "",
          //     operateMode: 1,
          //   };
          //   para.push(str);
          //   li.status = 3;
          //   li['rommNameText'] = this.screenRoomName(li.id)
          // });
          let para = [];
          res1.data.list.map((li, index) => {
            let userTelephone = JSON.parse(li.info) ? JSON.parse(li.info).userTelephone : ''
            let str = {
              imei: li.imei,
              userTelephone: userTelephone,
              password: "",
              operateMode: 1,
            };
            para.push(str);
            this.$store.commit("increment", 1);
            li.status = 3;
            li['rommNameText'] = this.screenRoomName(li.id)
          });
          // this.getallstatus(para);
          this.userlist = res1.data.list;
          this.total = res1.data.total;
          this.currentPage4 = val
          this.pageSize = size
        } else {
          this.$message.error(res1.message)
        }
      });
    },
    handleChange(value) {
      console.log(value);
    },
    //批量上传
    batchUpload() {
      this.uploadkj = true;
    },
    batchUploadpl() {
      let data = []
      this.userlist.map(li => {
        data.push(li.id)
      })
      console.log(data)
      let ids = {
        ids: data
      }
      httpPost(ids, this.$api.createkeyCard).then(res => {

      })
    },
    checkSameData(arr, str) {
      var _arr = [],
        _t = [],
        // 临时的变量
        _tmp;

      // 按照特定的参数将数组排序将具有相同值得排在一起
      arr = arr.sort(function (a, b) {
        var s = a[str],
          t = b[str];

        return s < t ? -1 : 1;
      });

      if (arr.length) {
        _tmp = arr[0][str];
      }
      // console.log( arr );
      // 将相同类别的对象添加到统一个数组
      for (var i in arr) {
        if (arr[i][str] === _tmp) {
          _t.push(arr[i]);
        } else {
          _tmp = arr[i][str];
          _arr.push(_t);
          _t = [arr[i]];
        }
      }
      // 将最后的内容推出新数组
      _arr.push(_t);
      return _arr;
    },
    //批量上传确认
    batchUploadfun() {
      var that = this;
      var array = this.checkSameData(this.userlist1, "phone");
      var arrlist = []
      this.batchCredentialList = []
      array.map(li => {
        arrlist.push(li[0])
      })
      if (this.value3) {
        var data = {
          list: arrlist,
        };
        httpPost(data, this.$api.infoImport).then((res) => {
          if (res.success) {
            arrlist.map((li, index) => {
              this.getperson(li, function (data) {
                li.id = data.id;
                array[index].map(lt => {
                  lt['personId'] = data.id
                })
                let screeningList = RequestSet.deWeight(array[index], 'type', 'modeContent')
                let passwordSum = 0,
                  nfcSum = 0;
                screeningList.map(li => {
                  var operateMode = '',
                    order = '',
                    pzname = '',
                    type = ''
                  if (li.mode == 4) {
                    operateMode = 7
                    order = 6207
                    type = 14
                    var num = RequestSet.getCertificatesNum(data.id, 14, 1, '') || 0
                    pzname = '密码' + (num + passwordSum)
                    passwordSum++
                  } else if (li.mode == 3) {
                    operateMode = 10
                    order = 6210
                    type = 13
                    var num = RequestSet.getCertificatesNum(data.id, 13, 1, '') || 0
                    pzname = 'NFC' + (num + nfcSum)
                    nfcSum++
                  }
                  var str = {
                    userTelephone: JSON.parse(li.info).userTelephone,
                    userPassword: JSON.parse(li.info).userPassword,
                    password: li.modeContent,
                    operateMode: operateMode,
                    order: order,
                    passwordStartTime: moment(that.value3[0].getTime()).format('YYYYMMDDHHmmss'),
                    passwordEndTime: moment(that.value3[1].getTime()).format('YYYYMMDDHHmmss'),
                    cardName: data.name,
                    pzname: pzname,
                    pass: false
                  };
                  var datafidOne = {
                    cardId: data.id,
                    content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1
                    type: type,
                    startTime: that.value3[0].getTime() / 1000,
                    endTime: that.value3[1].getTime() / 1000,
                  };
                  that.batchCredentialList.push(datafidOne)
                  httpPost(datafidOne, that.$api.addCertificates).then((res) => {
                    if (res.success) {

                      that.$message.success("添加成功")
                    } else {
                      that.$message.error("添加失败")
                    }
                  });
                })
                setTimeout(() => {
                  that.bindsaveFun(array[index]);
                }, 500)
              });
            });
            this.getlist();
            this.uploadkj = false;
          } else {
            this.$message.error('导入失败')
          }
        });
      } else {
        this.$message.error("请选择开始结束时间")
      }
    },
    //查询人员
    getperson(li, callback) {
      var data = {
        orderBy: "create_time desc",
        q: JSON.stringify({
          cardId: li.cardId,
        }),
      };
      let roomAbout = this.$store.state.roomAbout
      httpPost(data, this.$api.getlistNum).then((res) => {
        callback(res.data.list[0]);
      });
    },
    // 绑定房间
    bindsaveFun(list) {
      var array = this.checkSameData(list, "siteId");
      array.map((drawerRow, index) => {
        this.sendUserlock(drawerRow[0])
        setTimeout(this.sendUservoucher(drawerRow), 1000)
      })
    },
    getCertificatesName(id, type, content, callback) {
      this.batchCredentialList.map(li => {
        var info = JSON.parse(li.content)
        if (li.cardId == id && li.type == type && info.password == content) {
          var pzname = info.pzname
          callback(pzname)
        }
      })
    },
    sendUservoucher(voucherlist) {
      voucherlist.map(drawerRow => {
        setTimeout(() => {
          var credentialName = ''
          if (drawerRow.mode == 2) {
            this.getCertificatesName(drawerRow.personId, 12, drawerRow.modeContent, (callback) => {
              credentialName = callback
              console.log(credentialName)
              this.sendVoucherMethods(drawerRow, credentialName)
            })
          } else if (drawerRow.mode == 3) {
            this.getCertificatesName(drawerRow.personId, 13, drawerRow.modeContent, (callback) => {
              credentialName = callback
              console.log(credentialName)
              this.sendVoucherMethods(drawerRow, credentialName)
            })
          } else if (drawerRow.mode == 4) {
            this.getCertificatesName(drawerRow.personId, 14, drawerRow.modeContent, (callback) => {
              credentialName = callback
              this.sendVoucherMethods(drawerRow, credentialName)
            })
          }
        }, 1000)
      })
    },
    sendVoucherMethods(drawerRow, credentialName) {
      var info = JSON.parse(drawerRow.info);
      var data = [{
        cardId: drawerRow.personId,
        siteId: drawerRow.siteId,
        startTime: this.value3[0],
        endTime: this.value3[1]
      },];
      var setid = {
        pageNum: 1,
        pageSize: 10,
        q: JSON.stringify({
          roomIds: [drawerRow.siteId],
          lockType: 1
        }),
      };
      httpPost(setid, this.$api.getDeviceItems).then((res) => {
        var timeMantissa = moment().format('xx')
        var mantissa = timeMantissa.substr(timeMantissa.length - 4,
          timeMantissa.length - 1)
        if (res.data.list.length > 0) {
          var IMEI = res.data.list[0].imei
          var DeviceNumRow = res.data.list[0]
          if (DeviceNumRow.manufactureId == 201 || DeviceNumRow.manufactureId == 221) {
            var startTime = this.value3[0].getTime() / 1000
            var endTime = this.value3[1].getTime() / 1000
            if (drawerRow.mode == 4) {
              var pwd = drawerRow.modeContent
              var userid = info.userPassword
              var str = {
                username: drawerRow.name,
                pzname: credentialName,
                imei: IMEI,
                userTelephone: info.userTelephone,
                userPassword: info.userPassword,
                operateMode: 7,
                order: 6207,
                password: JSON.stringify(pwd),
                passwordStartTime: startTime,
                passwordEndTime: endTime,
                is: false,
              };
              if (JSON.stringify(pwd).length != 6) {
                this.$message.error("密码格式错误")
                return
              }
              var cardName = drawerRow.name + '-' + credentialName
              ICINLocker.addForeverPassword(DeviceNumRow.deviceNum, IMEI,
                userid, 1,
                pwd, 255, startTime, endTime, 6207, cardName,
                DeviceNumRow.roomName, (
                  callback1) => {
                if (callback1.success) {
                  var data = {
                    deviceNum: DeviceNumRow.deviceNum,
                    imei: IMEI,
                    cardId: drawerRow.personId,
                    content: JSON.stringify(
                      str
                    ), //operateMode:NFC-10、把人员添加到凭证-1
                    type: drawerRow.mode,
                    serial: callback1.data
                      .serialNumber,
                    startTime: this.value3[0]
                      .getTime() / 1000,
                    endTime: this.value3[1]
                      .getTime() / 1000,
                  };
                  httpPost(data, this.$api
                    .addCertificates).then((
                      res) => {

                    });
                  this.$message.success("下发成功")
                } else {
                  this.$message.error(callback1.msg)
                }
              })
            } else if (drawerRow.mode == 3) {
              var userid = info.userPassword
              var cardNo = utils.cardFormatConversion(drawerRow.modeContent.toUpperCase())
              if (cardNo.length == 8) {
                cardNo = cardNo + '00000000'
              } else if (cardNo.length != 16) {
                cardNo = cardNo.padEnd(16, '0')
              }
              var str = {
                username: drawerRow.name,
                pzname: credentialName,
                imei: IMEI,
                userTelephone: info.userTelephone,
                userPassword: info.userPassword,
                operateMode: 10,
                order: 6210,
                password: cardNo,
                passwordStartTime: startTime,
                passwordEndTime: endTime,
                is: false,
              };
              if (cardNo.length != 8) {
                this.$message.error("NFC格式错误")
                return
              }
              var cardName = drawerRow.name + '-' + credentialName
              ICINLocker.RfCardRegister(DeviceNumRow.deviceNum,
                IMEI, userid, 1, 1, cardNo,
                50, startTime, endTime, 6210, cardName, DeviceNumRow
                .roomName, (callback1) => {
                  if (callback1.success) {
                    var data = {
                      deviceNum: DeviceNumRow.deviceNum,
                      imei: IMEI,
                      cardId: drawerRow.personId,
                      content: JSON.stringify(
                        str
                      ), //operateMode:NFC-10、把人员添加到凭证-1
                      type: drawerRow.mode,
                      serial: callback1.data
                        .serialNumber,
                      startTime: this.value3[0]
                        .getTime() / 1000,
                      endTime: this.value3[1]
                        .getTime() / 1000,
                    };
                    httpPost(data, this.$api
                      .addCertificates).then((
                        res) => {

                      });
                    this.$message.success("下发成功")
                  } else {
                    this.$message.error(callback1.msg)
                  }
                })
            } else if (drawerRow.mode == 2) {
              var userid = info.userPassword
              var cardNo = reverse(drawerRow.modeContent)
                .toUpperCase()
              var str = {
                username: drawerRow.name,
                pzname: credentialName,
                imei: DeviceNumRow.imei,
                userTelephone: info.userTelephone,
                userPassword: info.userPassword,
                operateMode: 13,
                order: 6213,
                password: cardNo,
                passwordStartTime: startTime,
                passwordEndTime: endTime,
                is: false,
              };
              if (cardNo.length != 16) {
                this.$message.error("身份证格式错误")
                return
              }
              var cardName = drawerRow.name + '-' + credentialName
              ICINLocker.RfCardRegister(DeviceNumRow.deviceNum,
                IMEI, userid, 1, 1, cardNo,
                36, startTime, endTime, 6213, cardName, DeviceNumRow
                .roomName, (callback1) => {
                  if (callback1.success) {
                    var data = {
                      deviceNum: DeviceNumRow.deviceNum,
                      imei: IMEI,
                      cardId: drawerRow.personId,
                      content: JSON.stringify(
                        str
                      ), //operateMode:NFC-10、把人员添加到凭证-1
                      type: drawerRow.mode,
                      serial: callback1.data
                        .serialNumber,
                      startTime: this.value3[0]
                        .getTime() / 1000,
                      endTime: this.value3[1]
                        .getTime() / 1000,
                    };
                    httpPost(data, this.$api
                      .addCertificates).then((
                        res) => {

                      });
                    this.$message.success("下发成功")
                  } else {
                    this.$message.error(callback1.msg)
                  }
                })
            } else {
              this.$message.error("批量不支持指纹")
            }
          } else if (DeviceNumRow.manufactureId == 101) {
            var passwordStartTime = moment(this.value3[0].getTime()).format('YYYYMMDDHHmmss')
            var passwordEndTime = moment(this.value3[1].getTime()).format('YYYYMMDDHHmmss')
            var str = {}
            if (drawerRow.mode == 2) {
              var arr2 = drawerRow.modeContent
              str = {
                username: drawerRow.name,
                imei: IMEI,
                pzname: credentialName,
                userTelephone: info.userTelephone,
                userPassword: info.userPassword,
                operateMode: 13,
                order: 6213,
                password: arr2.toUpperCase(),
                passwordStartTime: moment(this.value3[0].getTime())
                  .format('YYYYMMDDHHmmss'),
                passwordEndTime: moment(this.value3[1].getTime())
                  .format('YYYYMMDDHHmmss'),
                is: false,
              };
              if (arr2.length != 16) {
                this.$message.error("身份证格式错误");
                return false;
              }
            } else if (drawerRow.mode == 3) {
              var array3 = drawerRow.modeContent
              str = {
                username: drawerRow.name,
                imei: IMEI,
                pzname: credentialName,
                operateMode: 10,
                order: 6210,
                userTelephone: info.userTelephone,
                userPassword: info.userPassword,
                password: array3.toUpperCase(),
                passwordStartTime: moment(this.value3[0].getTime())
                  .format('YYYYMMDDHHmmss'),
                passwordEndTime: moment(this.value3[1].getTime())
                  .format('YYYYMMDDHHmmss'),
                is: false,
              };
              if (array3.length != 8) {
                this.$message.error("NFC格式错误");
                return false;
              }
            } else if (drawerRow.mode == 4) {
              var password = JSON.stringify(drawerRow.modeContent)
              str = {
                username: drawerRow.name,
                imei: IMEI,
                password: password,
                pzname: credentialName,
                userTelephone: info.userTelephone,
                userPassword: info.userPassword,
                operateMode: 7,
                order: 6207,
                passwordStartTime: moment(this.value3[0].getTime())
                  .format('YYYYMMDDHHmmss'),
                passwordEndTime: moment(this.value3[1].getTime())
                  .format('YYYYMMDDHHmmss'),
                is: false,
              };
              if (password.length != 6) {
                this.$message.error("密码格式错误");
                return false;
              }
            }
            str['cardName'] = drawerRow.name + '-' + str.pzname,
              str['roomName'] = DeviceNumRow.roomName,
              httpPost(str, this.$api.getDeviceOperateUserInfo).then(
                (res1) => {
                  if (res1.success) {
                    var data = {
                      deviceNum: DeviceNumRow.deviceNum,
                      imei: IMEI,
                      cardId: drawerRow.personId,
                      content: JSON.stringify(
                        str
                      ), //operateMode:NFC-10、把人员添加到凭证-1
                      type: drawerRow.mode,
                      serial: res1.data.serialNumber,
                      startTime: this.value3[0]
                        .getTime() / 1000,
                      endTime: this.value3[1].getTime() / 1000,
                    };
                    httpPost(data, this.$api.addCertificates)
                      .then((res) => {

                      });
                  } else {
                    this.$message.error(res1.msg)
                  }
                }
              );

          }
        } else {
          this.$message.error(drawerRow.siteName + "该房间未找到对应门锁")
        }
      })
    },
    sendUserlock(drawerRow) {
      var info = JSON.parse(drawerRow.info);
      var data = [{
        cardId: drawerRow.personId,
        siteId: drawerRow.siteId,
        startTime: this.value3[0],
        endTime: this.value3[1]
      },];
      var setid = {
        pageNum: 1,
        pageSize: 10,
        q: JSON.stringify({
          roomIds: [drawerRow.siteId],
          lockType: 1
        }),
      };
      httpPost(setid, this.$api.getDeviceItems).then((res) => {
        if (res.data.list.length > 0) {
          var timeMantissa = moment().format('xx')
          var mantissa = timeMantissa.substr(timeMantissa.length - 4, timeMantissa.length - 1)
          var IMEI = res.data.list[0].imei
          var DeviceNumRow = res.data.list[0]
          if (DeviceNumRow.manufactureId == 201 || DeviceNumRow.manufactureId == 221) {
            ICINLocker.addUserToLock(DeviceNumRow.deviceNum, IMEI, info.userPassword, 0, 1,
              6226, drawerRow.name, DeviceNumRow.roomName, (callback) => {
                if (callback.success) {
                  var userstr = {
                    lockerId: DeviceNumRow.deviceNum,
                    imei: IMEI,
                    lockerUserId: info.userPassword,
                    keyId: info.userPassword,
                    role: 0,
                    action: 1,
                    order: 6226,
                    cardName: drawerRow.name,
                    roomName: DeviceNumRow.roomName
                  };
                  var locakUserdata = {
                    deviceNum: DeviceNumRow.deviceNum,
                    imei: IMEI,
                    cardId: drawerRow.personId,
                    content: JSON.stringify(
                      userstr
                    ), //operateMode:NFC-10、把人员添加到凭证-1
                    type: 26,
                    serial: callback.data.serialNumber,
                    startTime: this.value3[0].getTime() / 1000,
                    endTime: this.value3[1].getTime() / 1000,
                  }
                  utils.sendLockUser(locakUserdata, (callbackLOCK) => {

                  })
                  httpPost(data, this.$api.bindCard).then((res1) => {
                    if (res1.success) {
                      this.$message.success("绑定成功")
                      this.getAboutRoom()
                    } else {
                      this.$message.error(res2.message)
                    }
                  })
                } else {
                  this.$message.error(callback.msg)
                }
              })
          } else if (DeviceNumRow.manufactureId == 101) {
            var passwordStartTime = moment(this.value3[0].getTime()).format('YYYYMMDDHHmmss')
            var passwordEndTime = moment(this.value3[1].getTime()).format('YYYYMMDDHHmmss')
            var str1 = {
              imei: IMEI,
              deviceNum: DeviceNumRow.deviceNum,
              userTelephone: info.userTelephone,
              // cardId:this.personInfo.cardId,
              userPassword: info.userPassword,
              password: info.userPassword,
              operateMode: 26,
              order: 6226,
              passwordStartTime: passwordStartTime,
              passwordEndTime: passwordEndTime,
              is: false,
              cardName: drawerRow.name,
              roomName: DeviceNumRow.roomName,
            };
            httpPost(str1, this.$api.getDeviceOperateUserInfo).then((res2) => {
              if (res2.success) {
                var userstr = {
                  lockerId: DeviceNumRow.deviceNum,
                  imei: IMEI,
                  lockerUserId: info.userPassword,
                  keyId: info.userPassword,
                  role: 0,
                  action: 1,
                  order: 6226,
                  cardName: drawerRow.name,
                  roomName: DeviceNumRow.roomName
                };
                var locakUserdata = {
                  deviceNum: DeviceNumRow.deviceNum,
                  imei: IMEI,
                  cardId: drawerRow.personId,
                  content: JSON.stringify(
                    userstr
                  ), //operateMode:NFC-10、把人员添加到凭证-1
                  type: 26,
                  serial: res2.data.serialNumber,
                  startTime: this.value3[0].getTime() / 1000,
                  endTime: this.value3[1].getTime() / 1000,
                }
                utils.sendLockUser(locakUserdata, (callbackLOCK) => {

                })
                httpPost(data, this.$api.bindCard).then((res1) => {
                  if (res1.success) {
                    this.$message.success("绑定成功")
                    this.getAboutRoom()
                  } else {
                    this.$message.error(res2.message)
                  }
                })
              } else {
                this.$message.error(res2.message)
              }
            });
          }
        } else {
          this.$message.error(drawerRow.siteName + "该房间未找到对应门锁")
        }
      });
    },
    // 多选操作
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
    // 新增房源，选择凭证
    handleSelectionChange2(val) {
      this.multipleSelection2 = val;
    },
    handleSelectionChange3(val) {
      this.multipleSelection3 = val;
    },
    handleSelectionChange4(val) {
      this.multipleSelection4 = val;
    },
    handleSelectionChange1(val) {
      this.multipleSelection1 = val;
    },
    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 = [];
    },
    // 编辑操作
    handleEdit(index, row) {
      this.modify = false;
      this.idx = index;
      this.form = row;
      this.editVisiblelist = true;
      var data = [{
        itemId: row.id,
      }]
      httpPost(data, this.$api.getPersonBindEnterprise).then(res => {
        if (res.code == 200) {
          var list = []
          res.data.map(li => {
            list.push(li.enterpriseId)
          })
          this.defaultEnterpriseId = list
          this.defaultEnterpriseIdBack = res.data
        }
      })
    },
    // 子组件触发修改
    handleEdit1(row) {
      this.modify = false;
      this.form = row;
      this.editVisiblelist = true;
    },
    // 重置from
    resetFrom() {
      this.form = {
        sex: 1,
        number: "",
        name: "",
        phone: "",
        cardId: "",
        cardState: 1,
      };
    },
    modifyEdit() {
      var data = {
        id: this.form.id,
        cardId: this.form.cardId,
        cardState: this.form.cardState,
        name: this.form.name,
        number: this.form.number,
        phone: this.form.phone,
        sex: parseInt(this.form.sex),
        enterpriseId: this.form.enterpriseId,
        type: this.form.type,
      };
      if (this.form.key) {
        var rowInfo = JSON.parse(this.form.info)
        var rqTime = moment().format("X")
        rowInfo.loginKey = setCode("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXKHkNKieiGOTjXZJ0lFBjhRCa\nZTaAebTIfB9nnnVmNVIp//yCfyFXSlxbAj58CQwCVhwy109ROYf3BcsQNMZz7Djo\n8a5V0JThNye4ihxLiYLawLRjb2y2/IhzV0/JZiFtaM83xUt0tbqTKxD00Up7dy8c\n9OXc0h//0uQSraf6JwIDAQAB", this.form.key)
        data.info = JSON.stringify(rowInfo)
      }
      httpPost(data, this.$api.updateCard).then((res) => {
        if (this.defaultEnterpriseIdBack.length > 0) {
          let arr = []
          this.defaultEnterpriseIdBack.map(li => {
            var obj = {
              itemId: li.cardId,
              orderId: li.enterpriseId,
            }
            arr.push(obj)
          })
          httpPost(arr, this.$api.personUnBindEnterprise).then(res => {
            if (res.code == 200) {
              let dataprise = []
              this.checkEnterpriseNode.map(li => {
                var obj = {
                  itemId: this.form.id,
                  orderId: li.value,
                }
                dataprise.push(obj)
              })
              httpPost(dataprise, this.$api.personBindEnterprise).then(res => {

              })
            }
          })
        } else {
          if (this.checkEnterpriseNode.length > 0) {
            let dataprise = []
            this.checkEnterpriseNode.map(li => {
              var obj = {
                itemId: this.form.id,
                orderId: li.value,
              }
              dataprise.push(obj)
            })
            httpPost(dataprise, this.$api.personBindEnterprise).then(res => {

            })
          }
        }
        this.editVisiblelist = false;
        this.getlist();
        this.$store.commit("increment", 1);
      });
    },
    // 分页导航
    handlePageChange(val) {
      this.$set(this.query, "pageIndex", val);
      this.getData();
    },
    btnClick() {
      document.querySelector(".input-file").click();
    },
    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]]);
          // 自定义方法向父组件传递数据
          console.log(outdata)
          var userInfo = localStorage.getItem('info')
          let arr = [];
          outdata.map((li, index) => {
            var obj = {};
            obj.name = li["人员名称"];
            obj.siteId = li["房间ID"];
            obj.siteName = li["房间名称"];
            obj.number = li["学工号"];
            obj.cardId = li["卡号"];
            obj.phone = li["电话(为11位手机号码)"];
            obj.sex = li["性别(1为男，2为女)"];
            obj.mode = li["开锁方式(3为NFC,4为密码)"];
            obj.modeContent = li["内容(NFC为8位16进制物理卡号、密码为6位数字密码)"];
            obj.id = li["id"];
            obj.cardState = '1';
            obj.enterpriseId = JSON.parse(userInfo).enterpriseId;
            obj.type = 0;
            var phone = JSON.stringify(obj.phone);
            obj.phone = phone
            obj.siteId = JSON.stringify(obj.siteId)
            var str = {
              userPassword: phone.substr(phone.length - 6, phone.length - 1),
              userTelephone: phone,
            };
            obj.info = JSON.stringify(str);
            if (obj.sex == "男") {
              obj.sex = 1;
            } else if (obj.sex == "女") {
              obj.sex = 2;
            }
            if (obj.mode == "密码") {
              obj.mode = 4;
            } else if (obj.mode == "NFC") {
              obj.mode = 3;
            } else if (obj.mode == "身份证") {
              obj.mode = 2;
            }
            if (obj.cardState == "正常") {
              obj.cardState = 1;
            } else if (obj.cardState == "挂失") {
              obj.cardState = 2;
            } else if (obj.cardState == "挂失冻结") {
              obj.cardState = 3;
            } else if (obj.cardState == "冻结") {
              obj.cardState = 4;
            } else if (obj.cardState == "预开户") {
              obj.cardState = 5;
            } else if (obj.cardState == "过期") {
              obj.cardState = 6;
            }
            arr.push(obj);
          });
          console.log(arr);
          that.userlist1statu = false;
          that.$nextTick(() => {
            that.userlist1 = arr;
            that.userlist1statu = true;
          });
        };
        reader.readAsArrayBuffer(f);
      };
      reader.readAsBinaryString(f);
    },
  },
};
</script>

<style scoped>
.el-dialog .el-input__inner.el-date-editor--datetimerange {
  width: 100%;
}

/*  .handle-box .handle-input:last-child {
    display: inline-block;
  } */

.handle-input {
  /* width: 3rem; */
  /* display: inline-block; */
  margin-bottom: 10px;
}

.mr10 {
  margin-right: 10px;
}

.marginb20 {
  margin-bottom: 20px;
}

.contentc {
  display: flex;
  align-items: center;
}

.cardrelative::before {
  content: " ";
  position: absolute;
  top: 50%;
  left: 0;
  transform: translateY(-50%);
  width: 8px;
  height: 57px;
}

.aftercolor1::before {
  background: #f2827c;
}

.aftercolor2::before {
  background: #ffd791;
}

.aftercolor3::before {
  background: #90d09e;
}

.aftercolor4::before {
  background: #73cde2;
}

.aftercolor5::before {
  background: #128bf1;
  top: 40px;
  transform: none;
}

.contentc .contenttitle {
  font-size: 16px;
  color: #333;
  line-height: 30px;
  margin-left: 10px;
}

.contentc .contentnum {
  font-size: 35px;
  color: #333;
  line-height: 35px;
  margin-left: 30px;
}

.cardrelative {
  position: relative;
}

.cardrelative .pzimg {
  position: absolute;
  max-width: 100%;
  bottom: -15px;
  right: 0;
}

.paddcontent {
  padding: 14px 0;
}

.contentc1 {
  display: block;
}

.contentleft {
  width: 48%;
  box-sizing: border-box;
  margin-left: 30px;
  display: inline-block;
  vertical-align: top;
}

.pieChart {
  width: 50%;
  height: 200px;
  display: inline-block;
  vertical-align: top;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

.pieChart .schart {
  height: 100%;
}

.heightbt {
  height: 220px;
}

.contentleft .contenttitle {
  display: inline-block;
}

.contentleft .contentnum {
  display: inline-block;
}

.contentleft>ul {
  box-sizing: border-box;
  margin-left: 30px;
}

.contentul li {
  display: flex;
  align-items: center;
  line-height: 40px;
  position: relative;
  color: #333333;
}

.contentul li::before {
  content: "●";
  position: absolute;
  top: 50%;
  left: -20px;
  transform: translateY(-50%);
  color: #128bf1;
}

.contentul li>span {
  width: 50%;
}

.userlist {
  justify-content: space-between;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  position: relative;
  margin-top: 20px;
}

/* .userlist::after{
  content: '';
  flex: auto;
} */
.userlist .userli {
  display: inline-block;
  box-sizing: border-box;
  overflow: hidden;
}

.userlist .ko {
  height: 0;
  overflow: hidden;
  padding: 0;
  width: 264px;
}

.paging {
  margin-top: 30px;
  text-align: center;
}

.add {
  width: 264px;
  height: 276px;
  cursor: pointer;
}

.add .adddiv {
  margin-top: 50px;
  background: #fff;
  border-radius: 6px;
  box-shadow: 0px 0px 9px 0px rgba(6, 6, 6, 0.06);
  height: 226px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}

.add .adddiv img {
  max-width: 100%;
}

.switchiconfont {
  position: absolute;
  top: 0;
  left: 0;
  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;
}

.nulldiv {
  text-align: center;
  color: #999;
  font-size: 16px;
  font-weight: 400;
}

.nullimg {
  margin: 30px auto;
  max-width: 300px;
}

.tablelist {
  position: relative;
  padding-top: 40px;
  margin-top: 20px;
}

.adddbtn {
  display: inline-block;
  position: absolute;
  top: 0;
  left: 75px;
}

.upload-demo {
  display: inline-block;
}

.upload-demo>>>.el-upload--text {
  display: inline;
}

.input-file {
  display: none;
}

.rltable {
  box-sizing: border-box;
  margin: 0 20px;
}

.ztree {
  /* height: 500px; */
  overflow-y: auto;
}

.temporary {
  margin-top: 20px;
}

.roomcontent {
  margin-top: 50px;
}

.roomcontent .roomconli {
  display: inline-block;
  cursor: pointer;
  position: relative;
}

.taball {
  width: 100%;
  margin-top: 50px;
}

.button-list {
  position: absolute;
  width: 300px;
  height: 160px;
  background: rgba(0, 0, 0, 0.5);
  top: 0;
  left: 20px;
  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 20px;
  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: 600px;
  overflow-y: auto;
}

.zZindex {
  z-index: 999999 !important;
}

.rltable>>>.sleect-option {
  z-index: 99 !important;
}

.tableoverflowHidden {
  overflow: hidden;
}

.seleectOption {
  width: 100px;
}

.operationclass>>>.el-drawer__header span {
  font-size: 20px !important;
}

.SearchInput {
  display: inline-block;
  width: 2rem;
}

.tablebutton .el-button {
  padding: 0;
}

.tablelist .el-table th>.cell {
  text-align: center;
  font-size: 14px;
}

.tablelist>>>.el-table .cell {
  text-align: center;
  font-size: 14px;
}

.tablelist .el-table__row .el-table__cell {
  padding: 10px 0;
}

.widthRem5 {
  /* display: inline-block; */
  width: 5rem;
}

.selectoptionClass {
  display: inline-block;
  margin-bottom: 10px;
}

/deep/ .table .wait-row {
  background: #fdf6ec;
}

/deep/ .table .warning-row {
  background: #fef0f0;
}

/deep/ .table .success-row {
  background: #f0f9eb;
}

.adddbtn .el-button+.el-button,
.adddbtn .el-checkbox.is-bordered+.el-checkbox.is-bordered {
  margin-left: 0;
}

@media only screen and (max-width: 1024px) {
  .adddbtn {
    left: 70px;
  }
}
</style>
