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

3467 lines
132 KiB

<template>
<div class="agreement">
<div class="container">
<el-row :gutter="20" class="mb-5">
<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-2 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
<div class="mr-2">
<i class="iconfont httpicon-tongjifenxi 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="0" class="color-03A9F4"></NumberGrow><span
class="font-size-16 color-00000073 ml-1"></span>
</div>
</div>
</div>
<div class="flexLi my-2 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
<div class="mr-2">
<i class="iconfont httpicon-yewuguanli 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="contractStatus.total" class="color-03A9F4"></NumberGrow><span
class="font-size-16 color-00000073 ml-1"></span>
</div>
</div>
</div>
<div class="flexLi my-2 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
<div class="mr-2">
<i class="iconfont httpicon-pingzhengguanli 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="contractStatus.signed" class="color-03A9F4"></NumberGrow><span
class="font-size-16 color-00000073 ml-1"></span>
</div>
</div>
</div>
<div class="flexLi my-2 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
<div class="mr-2">
<i class="iconfont httpicon-wuyedangan 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="contractStatus.expired" class="color-ff9900"></NumberGrow><span
class="font-size-16 color-00000073 ml-1"></span>
</div>
</div>
</div>
<div class="flexLi my-2 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
<div class="mr-2">
<i class="iconfont httpicon-pingzhengguanli 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="contractStatus.arrears" class="color-F56C6C"></NumberGrow><span
class="font-size-16 color-00000073 ml-1"></span>
</div>
</div>
</div>
<div class="flexLi my-2 d-flex flex-nowrap align-center d-inlie-block text-center hand-type">
<div class="mr-2">
<i class="iconfont httpicon-bianji 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="contractStatus.toBeSigned" class="color-03A9F4"></NumberGrow><span
class="font-size-16 color-00000073 ml-1"></span>
</div>
</div>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-input v-model="search.name" size="small" placeholder="租客名称" :clearable="true"
class="handle-input width150 mb-1">
</el-input>
<el-input v-model="search.phone" size="small" placeholder="租客电话" :clearable="true"
class="handle-input width150 mb-1">
</el-input>
<el-input v-model="search.roomName" size="small" placeholder="房间名称" :clearable="true"
class="handle-input width150 mb-1">
</el-input>
<el-cascader size="small" :options="roomList" collapse-tags @change="checkNodeSearch" :props="{ multiple: true }"
:clearable="true" class="width150" placeholder="请选择房间"></el-cascader>
<el-select v-model="search.status" size="small" placeholder="签约状态" class="handle-select width150 mb-1"
:clearable="true">
<el-option key="1" label="待签约" value="0"></el-option>
<el-option key="2" label="已签约" value="1"></el-option>
<el-option key="3" label="已欠费" value="2"></el-option>
<el-option key="4" label="已退租" value="3"></el-option>
<el-option key="5" label="已到期" value="5"></el-option>
</el-select>
<div class="d-inlie-block">
<el-input v-model="search.minRent" size="small" type="number" placeholder="最低租金" :clearable="true"
class="handle-input mb-1 width150">
</el-input> -
<el-input v-model="search.maxRent" size="small" type="number" placeholder="最高租金" :clearable="true"
class="handle-input mb-1 width150">
</el-input>
</div>
<div class="d-inlie-block">
<el-date-picker v-model="search.signingTime" size="small" type="datetime" class="width150 mb-1"
placeholder="选择开始日期" align="right" :picker-options="pickerOptions">
</el-date-picker> -
<el-date-picker v-model="search.contractTime" size="small" type="datetime" class="width150 mb-1"
placeholder="选择结束日期" align="right" :picker-options="pickerOptions">
</el-date-picker>
</div>
<el-button type="primary" style="background: #FA8E00; border: none;" size="small" class=" mb-1 mx-1"
icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="danger" style="background: #FA8E00; border: none;" size="small" class=" mb-1 mx-1"
@click="syncContractStatusMethods">同步合约状态</el-button>
<el-button type="primary" style="background: #FA8E00; border: none;" size="small" class=" mb-1 mx-1"
@click="restSearch">重置</el-button>
<el-button type="primary" style="background: #FA8E00; border: none;" size="small" class=" mb-1 mx-1"
@click="signContract">签约</el-button>
<el-button type="primary" style="background: #FA8E00; border: none;" size="small" class=" mb-1 mx-1"
@click="batchLeaseCancellationMethods">批量退租</el-button>
<el-button type="primary" style="background: #FA8E00; border: none;" size="small" class=" mb-1 mx-1"
@click="batchDeleteMethods">批量删除</el-button>
<el-button type="primary" style="background: #FA8E00; border: none;" size="small"
class=" mb-1 mx-1">导出合同</el-button>
<el-table :data="tableList" border stripe class="table mt-2" ref="multipleTable"
@selection-change="handleSelectionChange" header-cell-class-name="table-header" height="650px" empty-text="无">
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column prop="number" label="合同编号" align="center"></el-table-column>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="phone" label="电话" align="center"></el-table-column>
<el-table-column prop="sex" label="性别" align="center">
<template #default="scope">
{{ scope.row.sex === 1 ? '男' : scope.row.sex === 2 ? '女' : '' }}
</template>
</el-table-column>
<el-table-column prop="address" label="房间" align="center"></el-table-column>
<el-table-column label="租期" align="center">
<template #default="scope">
{{ scope.row.signingTime }}<br /> 至 <br />{{ scope.row.contractTime }}
</template>
</el-table-column>
<el-table-column prop="monthRent" label="租金/¥" align="center"></el-table-column>
<el-table-column label="合约状态" align="center">
<template #default="scope">
<el-tag
:type="scope.row.status === 0 ? '' : scope.row.status === 1 ? 'success' : scope.row.status === 2 ? 'danger' : scope.row.status === 3 ? 'warning' : scope.row.status === 4 ? 'info' : ''">
{{
scope.row.status === 0 ? '待签约' : scope.row.status === 1 ? '已签约' : scope.row.status === 2 ? '已欠费' :
scope.row.status === 3 ? '已退租' : scope.row.status === 4 ? '已删除' : scope.row.status === 5 ? '已到期' : '未知'
}}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" align="center"></el-table-column>
<el-table-column prop="remark" label="备注" align="center">
<template #default="scope">
<el-input v-model="scope.row.remark" size="mini" style="width: 100px;" maxlength="20" class="width-100-px"
@blur="confirmRemark(scope.$index, scope.row)" v-if="modifyIndex === scope.$index">
</el-input>
<el-tooltip class="item" effect="dark" :content="scope.row.remark" placement="top" v-else>
<span>{{ scope.row.remark }}</span>
</el-tooltip>
<i class="el-icon-edit red hand-type" @click.stop="setRemark(scope.$index, scope.row)"></i>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button type="text" @click="changebatchRenewalShow(scope.$index, scope.row)">续租</el-button>
<el-button type="text" class="red" @click="rentOutOperation(scope.$index, scope.row)"
:disabled="scope.row.status > 2 ? true : false">退租</el-button>
<el-button type="text" @click="deleteAgreement(scope.$index, scope.row)">删除</el-button>
<el-button type="text" class="red">冻结用户权限</el-button>
<el-button type="text" @click="exportHtmlWord(scope.$index, scope.row)">预览合同</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"
:page-sizes="[10, 30, 100, 200]" :page-size="pageSize" :layout="paginationConfig" :total="pageTotal">
</el-pagination>
</div>
<el-dialog title="预览合同" :visible.sync="dialogVisibleExport" width="60%" :before-close="handleCloseExport">
<div style="overflow-y: auto;height: 500px;">
<contractTemplate id="question_doc" :data="exportRow"></contractTemplate>
</div>
<el-button type="primary" size="mini" class="mt-2" @click="exportWord">导出</el-button>
</el-dialog>
<el-dialog title="签约" :visible.sync="dialogVisible" width="80%" :before-close="handleClose">
<div>
<el-collapse accordion v-model="activeNames">
<el-collapse-item name="1">
<template slot="title">
<span class="font-weight-600 font-size-18">填写签约人信息</span><i
class="header-icon el-icon-user-solid font-size-20 ml-2"></i>
</template>
<div v-for="(item, index) in form.tenant" :key="index">
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width50 text-center"><b class="color-red">*</b>姓名</span>
<!-- <el-input :clearable="true"-->
<!-- placeholder="请输入姓名"-->
<!-- v-model="form.tenant[index].name" class="width200">-->
<!-- </el-input>-->
<el-autocomplete v-model="form.tenant[index].name" class="widthThree" :maxlength="8"
:fetch-suggestions="querySearchAsync" placeholder="请输入内容" @select="handleSelectPerson(index, $event)"
clearable>
<template slot-scope="{ item }">
<div class="name">{{ item.name }}->{{ item.phone }}</div>
</template>
</el-autocomplete>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width50 text-center"><b class="color-red">*</b>手机号</span>
<el-input :clearable="true" placeholder="请输入电话号码" v-model="form.tenant[index].phone" class="width200">
<el-button slot="append" icon="el-icon-right" @click.stop="searchPeople(index)"></el-button>
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width100 text-center mr-1"><b class="color-red">*</b>证件类型</span>
<el-select v-model="form.tenant[index].cardType" placeholder="请选择证件类型" class="width200"
:clearable="true">
<el-option v-for="item in IdCardOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width50 text-center"><b class="color-red">*</b>证件号</span>
<el-input :clearable="true" placeholder="请输入证件号" v-model="form.tenant[index].number" class="width200">
<el-button slot="append" icon="el-icon-right" @click.stop="searchPeople(index)"></el-button>
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width50 text-center">性别</span>
<el-select v-model="form.tenant[index].sex" placeholder="请选择性别" class="width200" :clearable="true">
<el-option v-for="item in sexOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width50 text-center">籍贯</span>
<el-input :clearable="true" placeholder="请输入籍贯" v-model="form.tenant[index].place" class="width200">
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width100 text-center mr-1">通讯地址</span>
<el-input :clearable="true" placeholder="请输入通讯地址" v-model="form.tenant[index].address" class="width200">
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width100 text-center mr-1">租户类别</span>
<el-select v-model="form.tenant[index].tenantType" placeholder="请选择租户类别" class="width200"
:clearable="true">
<el-option v-for="item in tenantOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width100 text-center mr-1">补贴标准</span>
<el-select v-model="form.tenant[index].subsidy" placeholder="请选择补贴标准" class="width200"
:clearable="true">
<el-option v-for="item in subsidyOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
</div>
<el-divider content-position="left" v-if="(index + 1) !== form.tenant.length"><i
class="el-icon-arrow-down"></i> 添加同住人{{ index + 1 }}信息 <i class="el-icon-arrow-down"></i></el-divider>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2" v-if="(index + 1) === form.tenant.length">
<el-button type="primary" @click="addCohabitant">添加同住人</el-button>
<el-button type="primary" @click="deleteCohabitant(index)" v-if="index !== 0">删除同住人</el-button>
</div>
</div>
</el-collapse-item>
<el-collapse-item name="2">
<template slot="title">
<span class="font-weight-600 font-size-18">查找房源信息</span><i
class="header-icon el-icon-search font-size-20 ml-2"></i>
</template>
<div>
<el-cascader :options="roomList" size="small" :props="{ checkStrictly: true }" v-model="form.roomName"
@change="checkNode" :clearable="true" placeholder="请选择房源" class="mb-2"></el-cascader>
<el-input v-model="form.roomNameSearch" size="small" placeholder="房间名称" :clearable="true"
class="handle-input mb-2 width200"></el-input>
<el-button type="primary" size="small" class="mr10" icon="el-icon-search" @click="searchRoom">搜索</el-button>
<el-table :data="tableDataRom" style="width: 100%" max-height="400px">
<el-table-column align="center" prop="path" label="房屋地址信息"></el-table-column>
<el-table-column label="月租金" align="center">
</el-table-column>
<el-table-column label="房屋结构信息" align="center">
<el-table-column prop="name" align="center" label="房间名称" width="120">
</el-table-column>
<el-table-column prop="type" align="center" label="房间状态" width="120">
</el-table-column>
<el-table-column prop="layoutText" align="center" label="房间户型" width="120">
</el-table-column>
<el-table-column prop="acreage" align="center" label="面积" width="120">
</el-table-column>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text" size="medium" class="el-icon-upload2"
@click="selectRoom(scope.$index, scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-collapse-item>
<el-collapse-item name="3">
<template slot="title">
<span class="font-weight-600 font-size-18">填写合约信息</span><i
class="header-icon el-icon-edit-outline font-size-20 ml-2"></i>
</template>
<div>
<div class="split-Line" v-if="form.roomName">
<el-divider><i class="el-icon-arrow-down"></i> 所选房间 <i class="el-icon-arrow-down"></i></el-divider>
<div class="d-flex mb-2">
<div class="mr-4 "><span class="color-666">地址:</span><span class="font-weight-600">{{ form.roomName
}}</span></div>
<div class="mr-4"><span class="color-666">套内房间数量:</span><span class="font-weight-600">{{ form.roomNum
}}</span></div>
<div class="mr-4"><span class="color-666">月租金:</span><span class="font-weight-600">{{ form.roomNum
}}</span></div>
<div class="mr-4"><span class="color-666">面积:</span><span class="font-weight-600">{{ form.acreage
}}</span></div>
<div class="mr-4"><span class="color-666">户型:</span><span class="font-weight-600">{{
form.layout === 0 ? '单间' : form.layout === 1 ? '一室一厅' : form.layout === 2 ? '两室一厅' : '三室一厅'
}}</span></div>
</div>
</div>
<div class="split-Line" v-if="form.tenant.length">
<el-divider><i class="el-icon-arrow-down"></i> 签约人 <i class="el-icon-arrow-down"></i></el-divider>
<div class="d-flex mb-2" v-for="(item, index) in form.tenant" :key="index"
v-if="item.phone && item.number">
<div class="mr-4"><span class="color-666">{{ index + 1 }}、姓名:</span><span class="font-weight-600">{{
item.name }}</span></div>
<div class="mr-4"><span class="color-666">证件类型:</span><span class="font-weight-600">{{ item.cardType ==
1 ? '身份证' : item.cardType == 2 ? '护照' : '其他' }}</span></div>
<div class="mr-4"><span class="color-666">证件号:</span><span class="font-weight-600">{{ item.number
}}</span></div>
<div class="mr-4"><span class="color-666">电话号码:</span><span class="font-weight-600">{{ item.phone
}}</span></div>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>租金</span>
<el-input :clearable="true" onkeyup="value=value.replace(/\D/g,'')" placeholder="请输入每月租金"
v-model="form.rent" class="width200">
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>支付方式</span>
<el-select v-model="form.pay" placeholder="请选择支付方式" class="width200" :clearable="true">
<el-option v-for="item in payOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>房屋合同编号</span>
<el-input :clearable="true" placeholder="请输入房屋合同编号" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')"
v-model="form.id" class="width200">
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>合同签约时间</span>
<el-date-picker v-model="form.signingTime" :clearable="true" type="datetime" placeholder="请选择签约时间">
</el-date-picker>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>合同有效时间</span>
<el-date-picker v-model="form.contractTime" :clearable="true" type="datetime" placeholder="请选择有效时间">
</el-date-picker>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>缴费日期</span>
<el-date-picker v-model="form.dueDate" :clearable="true" type="date" placeholder="选择缴费日期">
</el-date-picker>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1">合同备注</span>
<el-input :clearable="true" type="textarea" :rows="1" placeholder="请输入备注" v-model="form.remark"
class="width200">
</el-input>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1">是否发送动态临时密码</span>
<el-radio-group v-model="sendTemporaryPasswordStatus" size="mini">
<el-radio-button label="是"></el-radio-button>
<el-radio-button label="否"></el-radio-button>
</el-radio-group>
</div>
</div>
<div class="demo-input-suffix d-inlie-block mr-2 mb-2">
<div class="d-flex align-center">
<span class="width120 text-center mr-1"><b class="color-red">*</b>录入开锁授权</span>
<el-select v-model="documentType" placeholder="请选择凭证类型" class="width200" :clearable="true">
<el-option v-for="item in payOptionsOne" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
</div>
<el-form>
<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="时效密码" v-if="documentType == 15" prop="password">
<el-input v-model.trim="voucher.limitpassword" type="number" size="middle" class="widthRem5"
maxlength="6" :clearable="true" @change="avoidRepetition($event, 15)" show-password>
</el-input>
</el-form-item>
<!-- 凭证有效期 -->
<el-form-item label="开始时间" v-if="documentType != '' ? true : false">
<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="结束时间" v-if="documentType != '' ? true : false">
<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>
<el-button type="primary" size="small" @click="savevoucher"
v-if="documentType != '' ? true : false">保存</el-button>
<el-table :data="savevoucherlist" class="table" style="width: 100%;margin-top: 10px;"
header-cell-class-name="table-header">
<el-table-column prop="name" label="租客名称"></el-table-column>
<el-table-column label="凭证名称">
<template #default="scope">
<span v-if="scope.row.type == 11">指纹{{ scope.$index + 1 }}</span>
<span v-if="scope.row.type == 12">身份证{{ scope.$index + 1 }}</span>
<span v-if="scope.row.type == 13">NFC{{ scope.$index + 1 }}</span>
<span v-if="scope.row.type == 14">密码{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="凭证类型">
<template #default="scope">
<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 label="操作" width="400" align="center" class-name="tablebutton">
<template #default="scope">
<el-button type="text" class="red" @click="deletefun(scope.$index, scope.row)">删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-collapse-item>
</el-collapse>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="signAContract">签 约</el-button>
</span>
</el-dialog>
<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>
<zw ref="myChild"></zw>
<getFinger ref="myGetFinger"></getFinger>
</div>
</template>
<script>
import zw from "./zw.vue"
import getFinger from "./getFinger.vue"
import { httpGet, httpPost } from "../api";
import { smallToBig, uniqueArray1, ztreeToElementTree, dec2hex, group, ztreeToElementTree2 } from "../utils";
import utils from "../utils/util";
import IdentityCodeValid from "../utils/verification";
import RequestSet from "../api/allFun";
import ICINLocker from "../utils/equipment";
import moment from "moment";
import NumberGrow from "../components/visualizcomponent/NumberGrow.vue";
import contractTemplate from "../components/contractTemplate/contractTemplate.vue";
import { saveAs } from 'file-saver';
import htmlDocx from 'html-docx-js/dist/html-docx';
export default {
name: "agreement",
data() {
return {
// 续租信息
batchmessage: {},
batchRenewalFrom: {
startTime: new Date(),
endTime: ''
},
batchRenewalShow: false,
savevoucherlist: [],
checkInListing: [],
enterpriselist: [],
voucherlist: [],
total1: 0,
allAboutDevice: [],
regularCard: false,
maxDateTime: '',
minDateTime: '',
value2: ['', ''],
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; /*今天及之前*/
}
},
roomtable1: [],
drawerRow: {},
localFingerprint: {},
documentType: '', // 签约的录入凭证类型
voucher: {
nfc: "", // NFC
idcard: "", // 身份证
password: "123456", // 密码
fingerprintAlias: "", // 指纹
limitpassword: '', // 时效密码
}, // 凭证录入
roomlistZNodes: [],
contractStatus: {
total: 0,
signed: 0,
expired: 0,
arrears: 0,
toBeSigned: 0
},
WhetherToGreatAnAccount: true,
dialogVisibleExport: false,
exportRow: {},
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit('pick', [start, end]);
}
}]
},
sendTemporaryPasswordStatus: '否',
multipleSelection: [],
modifyIndex: '',
updateDialogStatus: false,
updateAgreementRow: {},
activeNames: '1',
payOptions: [
{ label: '现金', value: 1 },
{ label: '刷卡', value: 2 },
{ label: '支付宝', value: 3 },
{ label: '微信', value: 4 },
],
payOptionsOne: [
{ label: '指纹', value: 11 },
{ label: '身份证', value: 12 },
{ label: 'NFC', value: 13 },
{ label: '密码', value: 14 },
{ label: '时效密码', value: 15 },
],
roomList: [],
tableDataRom: [],
subsidyOptions: [
{ label: '一次性补贴', value: 1 },
{ label: '按月补贴', value: 2 },
{ label: '一次性补贴+按月基本补贴', value: 3 }
],
tenantOptions: [
{ label: '中国大陆', value: 1 },
{ label: '港澳台同胞', value: 2 },
{ label: '国际友人', value: 3 },
],
IdCardOptions: [
{ label: '身份证', value: 1 },
{ label: '护照', value: 2 }
],
sexOptions: [
{ label: '男', value: 1 },
{ label: '女', value: 2 }
],
tableList: [],
search: {
name: '',
phone: '',
status: '',
signingTime: '',
contractTime: '',
roomName: '',
minRent: '',
maxRent: '',
siteIds: ''
},
form: {
tenant: [
{
id: '',
name: '',
phone: '',
number: '',
cardType: 1,
sex: '',
place: '',
address: '',
tenantType: '',
subsidy: '',
userTelephone: '',
userPassword: '',
userId: '',
keyId: ''
}
],
manufactureId: '',
rent: '',
pay: '',
id: '',
signingTime: '',
contractTime: '',
dueDate: '',
remark: '',
roomId: '',
roomName: '',
deviceNum: '',
imei: '',
roomNum: '',
roomNameSearch: '',
acreage: '',
layout: ''
},
enterpriseListOption: [],
dialogVisible: false,
checkNodeId: '',
pageNum: 1,
pageSize: 10,
pageTotal: 0,
leasesId: '',
paginationConfig: 'total, sizes, prev, pager, next, jumper'
}
},
components: {
NumberGrow, contractTemplate, zw, getFinger
},
created() {
this.getAboutDevice()
if (this.$route.params.status) {
this.search.status = this.$route.params.status
}
this.getLeasesList()
this.getLeasesStatus()
this.getEnterprise()
this.getAboutRoom()
if (document.documentElement.clientWidth < 1080) {
this.paginationConfig = 'total, prev, pager, next'
} else {
this.paginationConfig = 'total, sizes, prev, pager, next, jumper'
}
},
mounted() {
document.addEventListener('keydown', this.keyDown)
this.getAllTree()
},
methods: {
// 续租
batchRenewalMethods() {
this.$confirm('此操作将延长入住时间, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if (this.batchRenewalFrom.endTime == '' || this.batchRenewalFrom.startTime == '') {
return this.$message.error('请选择时间范围')
}
if (this.batchRenewalFrom.startTime > this.batchRenewalFrom.endTime) {
return this.$message.error('开始时间不得大于结束时间')
}
// 获取该设备信息
let lockdata = {
pageNum: 1,
pageSize: 10,
q: JSON.stringify({ roomIds: [this.batchmessage.siteId], lockType: 1 })
}
httpPost(lockdata, this.$api.getDeviceItems).then(res => {
console.log(res);
if (res.success) {
var lockmessage = res.data.list[0] // 房间信息
lockmessage.cardId = this.batchmessage.cardId
if (lockmessage.manufactureId == 101) {
var userTelephone = this.batchmessage.phone.substring(this.batchmessage.phone.length - 6, this.batchmessage.phone.length);
var userPassword = this.batchmessage.phone.substring(this.batchmessage.phone.length - 6, this.batchmessage.phone.length);
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: lockmessage.deviceNum,
imei: lockmessage.imei,
userTelephone: userTelephone,
userPassword: userPassword,
password: userPassword,
operateMode: 2,
order: 6202,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
cardName: this.batchmessage.name,
roomName: lockmessage.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) => {
console.log(callback);
if (callback.success) {
var data = {
pageNum: 0,
pageSize: 0,
orderBy: "create_at desc",
q: {
cardId: this.batchmessage.cardId,
deviceNum: lockmessage.deviceNum,
types: "0,1,2,3,4",
inStatus: "0,1"
},
};
var unbind = {
id: this.batchmessage.cardId,
startTime: this.batchRenewalFrom.startTime,
endTime: this.batchRenewalFrom.endTime
};
// 重新绑定房间
httpPost(unbind, this.$api.setTenant).then((res) => {
console.log(res);
})
// 修改凭证
httpGet(data, this.$api.getCertificates).then((res) => {
let data = utils.zlib_unzip(res.data)
data.map(lt => {
utils.modifyPutCarfid(lockmessage, lt, startTime, endTime)
})
})
this.batchRenewalShow = false
} else {
this.$message.error("修改失败")
}
})
} else if (lockmessage.manufactureId == 201 || lockmessage.manufactureId == 221) {
var endTime = new Date(this.batchRenewalFrom.endTime).getTime()
var startTime = new Date(this.batchRenewalFrom.startTime).getTime()
var unbind = [{
cardId: this.batchmessage.cardId,
siteId: lockmessage.roomId,
}];
httpPost(unbind, this.$api.unbindCard).then((res) => {
var data1 = [{
cardId: this.batchmessage.cardId,
siteId: lockmessage.roomId,
startTime: this.batchRenewalFrom.startTime,
endTime: this.batchRenewalFrom.endTime
}];
httpPost(data1, this.$api.bindCard).then((res) => {
console.log(res);
});
})
var data = {
pageNum: 0,
pageSize: 0,
orderBy: "create_at desc",
q: {
cardId: this.batchmessage.cardId,
deviceNum: lockmessage.deviceNum,
types: "0,1,2,3,4",
inStatus: "0,1"
},
};
httpGet(data, this.$api.getCertificates).then((res) => {
console.log(res);
let data = utils.zlib_unzip(res.data)
console.log(data);
data.map(lt => {
utils.modifyPutCarfidzg(lockmessage, lt, startTime, endTime)
})
})
this.batchRenewalShow = false
}else{
this.$message.error("暂未发现对应设备")
}
} else {
this.$message.error(res.message)
}
})
})
},
// 开启续组界面
changebatchRenewalShow(index, row) {
this.batchRenewalShow = true
this.batchmessage = row
},
// 查询和房间相关的设备
getAboutDevice() {
httpGet("", this.$api.onlySiteDevice).then((res) => {
this.AboutDevice = res.data.list;
this.$store.commit("getAboutDevice", res.data.list);
});
},
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
});
},
// 采集卡
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("读卡错误,请检查读卡器是否正常!")
}
})
},
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()
}
},
// 凭证避免重复
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 = ''
}
})
} else if (type = 14) {
}
},
// 采集指纹
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
})
},
checkNodeSearch(e) {
let selectRow = []
console.log(e)
e.map(li => {
selectRow.push(...li)
})
console.log(selectRow)
this.search.siteIds = JSON.stringify(selectRow)
// this.bindSelectedList = selectRow
},
// 导出合同
exportHtmlWord(index, row) {
row.signingTime = moment(row.signingTime).format('YYYY-MM-DD')
row.contractTime = moment(row.contractTime).format('YYYY-MM-DD')
row['upperCase'] = smallToBig(row.rent)
this.exportRow = row
this.dialogVisibleExport = true
},
exportWord() {
let arr = document.querySelector('#question_doc') //获取dom
let html = arr.innerHTML; //获取html的内容
let htmlStr = `
<!DOCTYPE html>
<html lang="en">
<body style="font-family:方正仿宋_GBK;mso-ascii-font-family:'Times New Roman';">
${html}
</body>
</html>`; //把获取到的html放入到原生的html中
saveAs(
htmlDocx.asBlob(htmlStr, { orientation: 'landscape' }),
'房屋租赁合同.doc'
); // 导出为word
},
keyDown(e) {
//如果是回车则执行登录方法
if (e.keyCode == 13) {
if (this.$route.name == 'Login') {
this.handleSearch();
}
}
},
// 选择搜索人员
handleSelectPerson(index, item) {
let personInfo = JSON.parse(item.info)
this.form.tenant[index].id = item.id
this.form.tenant[index].phone = item.phone
this.form.tenant[index].number = item.number
this.form.tenant[index].sex = item.sex
this.form.tenant[index].name = item.name
this.form.tenant[index].userTelephone = personInfo.userTelephone
this.form.tenant[index].userPassword = personInfo.userPassword
this.form.tenant[index].userId = personInfo.userId
this.form.tenant[index].keyId = personInfo.keyId
this.getcertificate()
},
// 获取人员
querySearchAsync(queryString, cb) {
let q = {
name: queryString,
};
let data = {
pageSize: 10,
pageNum: 1,
q: JSON.stringify(q),
};
let personInfo = [];
this.loading = true;
httpPost(data, this.$api.getlistNum).then((res) => {
personInfo = res.data.list;
let restaurants = res.data.list;
let results = queryString ?
restaurants.filter(this.createFilter(queryString)) :
restaurants;
cb(results);
});
},
createFilter(queryString) {
return (restaurant) => {
return restaurant.name.indexOf(queryString) === 0;
};
},
// 同步合约状态
syncContractStatusMethods() {
httpGet('', '/v1/leases/auto/UpdatePayment').then(res2 => {
})
httpGet('', this.$api.getAutoRetreat).then(res => {
if (res.success) {
this.$message.success('同步成功')
this.getLeasesList()
this.getLeasesStatus()
} else {
this.$message.error('同步失败')
}
})
},
// 确认修改备注
confirmRemark(index, row) {
let list = [
{
id: row.id,
remark: row.remark
}
]
httpPost(list, this.$api.postUpdateLeases).then(res => {
if (res.success) {
this.$message.success('更新成功')
this.modifyIndex = ''
this.getLeasesList()
} else {
this.$message.error(res.message)
}
})
},
// 修改备注
setRemark(index, row) {
if (this.modifyIndex === '') {
this.modifyIndex = index
} else {
this.modifyIndex = ''
}
},
// 确认是否有重复人员签约合同
async setLeasesMethods(cardId, callback) {
let QData = utils.validObject({
phone: cardId,
})
let data = {
pageNum: this.pageNum,
pageSize: this.pageSize,
orderBy: "create_time desc",
q: JSON.stringify(QData)
}
if (data.q == '{}') {
delete data.q
}
httpPost(data, this.$api.postLeasesList).then(res => {
if (res.success) {
let list = []
res.data.list.map(li => {
if (li.status == 1 || li.status == 2) {
list.push(li)
}
})
if (list.length > 0) {
callback(false)
} else {
callback(true)
}
} else {
callback(false)
}
})
},
// 获取合同列表
getLeasesList() {
let QData = utils.validObject({
phone: this.search.phone,
name: this.search.name,
status: this.search.status,
signingTime: this.search.signingTime,
contractTime: this.search.contractTime,
siteIds: this.search.siteIds
})
let data = {
pageNum: this.pageNum,
pageSize: this.pageSize,
orderBy: "create_time desc",
q: JSON.stringify(QData)
}
if (data.q == '{}') {
delete data.q
}
httpPost(data, this.$api.postLeasesList).then(res => {
if (res.success) {
res.data.list.map(li => {
li.signingTime = moment(li.signingTime).format('YYYY-MM-DD HH:mm:ss')
li.contractTime = moment(li.contractTime).format('YYYY-MM-DD HH:mm:ss')
li.createTime = moment(li.createTime).format('YYYY-MM-DD HH:mm:ss')
// li.monthRent = JSON.parse(li.expand).rent || 0
})
this.tableList = res.data.list
this.pageTotal = res.data.total
this.contractStatus.total = res.data.total
} else {
this.$message.error(res.message)
}
})
},
// 获取合约状态统计
getLeasesStatus() {
httpGet('', this.$api.getLeasesStatusstatistics).then(res => {
if (res.success) {
let list = res.data
let contractStatus = {
total: 0,
signed: 0,
expired: 0,
arrears: 0,
toBeSigned: 0
}
list.map(li => {
if (li.value === 0) {
li.lable = '待签约'
contractStatus.toBeSigned += li.total
} else if (li.value === 1) {
li.lable = '已签约'
contractStatus.signed += li.total
} else if (li.value === 2) {
li.lable = '已欠费'
contractStatus.arrears += li.total
} else if (li.value === 3) {
li.lable = '已退租'
contractStatus.expired += li.total
}
})
this.contractStatus = contractStatus
}
})
},
// 删除合约
deleteAgreement(index, row) {
this.$confirm("是否先进行删除操作?", "提示", {
type: "warning",
}).then(() => {
let data = {
ids: [row.id]
}
httpPost(data, this.$api.postDeleteLeases).then(res => {
if (res.success) {
this.$message.success('删除成功')
this.getLeasesList()
this.getLeasesStatus()
} else {
this.$message.error(res.message)
}
})
})
},
// 更新合约内容
updateAgreement(index, row) {
this.updateAgreementRow = row
this.updateDialogStatus = true
},
// 签约
async signAContract() {
let info = JSON.parse(localStorage.getItem('info'))
let formData = this.form
await this.setLeasesMethods(formData.tenant[0].phone, (callback) => {
console.log(this, callback)
if (callback) {
if (formData.pay === '') {
this.$message.error('请选择支付方式')
} else if (formData.id === '') {
this.$message.error('请输入合同编号')
} else if (formData.dueDate === '') {
this.$message.error('请选择缴费时间')
} else if (formData.signingTime === '') {
this.$message.error('请选择签约时间')
} else if (formData.contractTime === '') {
this.$message.error('请选择有效期')
} else if (formData.tenant[0].phone === '' || formData.tenant[0].name === '') {
this.$message.error('请选择人员')
} else if (formData.deviceNum === '' || formData.roomName === '') {
this.$message.error('请选择房间')
} else if (this.documentType === '') {
this.$message.error('请选择录入凭证类型')
} else if (this.value2[0] == '' || this.value2[1] == '') {
this.$message.error("请选择开始结束时间")
} else {
// 获取所有人员
// var q = {
// };
// var data = {
// pageNum: 0,
// pageSize: 0,
// orderBy: "create_time desc",
// q: JSON.stringify(q),
// };
// httpPost(data, this.$api.getlistNum).then((res1) => {
// console.log(res1)
// if (res1.success) {
// let sum = 0
// res1.data.list.map(li => {
// if (li.phone != this.form.tenant[0].phone) {
// sum += 1
// }
// })
// if (sum == res1.data.total) {
// this.saveEdit()
// }
// }
// });
let dueDate = formData.dueDate.getDate()
console.log(dueDate)
let leasesData = {
papersType: formData.tenant[0].cardType,
place: formData.tenant[0].place,
number: formData.id,
sex: formData.tenant[0].sex,
phone: formData.tenant[0].phone,
name: formData.tenant[0].name,
mailing: formData.tenant[0].address,
leasesType: formData.tenant[0].tenantType,
subsidyStandards: formData.tenant[0].subsidy,
payStandards: formData.pay,
signingTime: formData.signingTime,
contractTime: formData.contractTime,
cutoffTime: formData.contractTime,
dueDate: formData.dueDate,
remark: formData.remark,
enterpriseId: info.enterpriseId,
siteId: formData.roomId,
cardId: formData.tenant[0].id,
address: formData.roomName,
status: 1,
monthRent: formData.rent,
expand: JSON.stringify({
rent: formData.rent,
dueDay: dueDate - 5,
})//扩展属性
}
httpPost(leasesData, this.$api.postAddLeases).then(res => {
if (res.success) {
this.$message.success('签约成功')
let data3 = {
code: "zg/getEmergence",
data: {
lockerId: this.form.deviceNum,
},
};
httpPost(data3, this.$api.sendCommand).then((res4) => {
let sendSData = {
name: formData.tenant[0].name,
address: formData.roomName,
number: formData.id,
date: dueDate,
total: formData.rent,
phone: formData.tenant[0].phone,
enterpriseId: info.enterpriseId,
password: res4.data.data
}
httpPost(sendSData, this.$api.sendSigningNotice).then(res => {
if (res.success) {
this.$message.success("通知成功")
// let data = {
// orderBy: "create_time desc",
// pageNum: 0,
// pageSize: 0,
// q: JSON.stringify({})
// }
// httpPost(data, this.$api.getlistNum).then(res => {
// let sum = 0;
// res.data.list.map(li => {
// if (li.phone != this.form.tenant[0].phone) {
// sum += 1
// }
// })
// if (sum == res.data.total) {
// this.saveEdit()
// }
// })
} else {
this.$message.error("通知失败")
}
})
})
this.getLeasesList()
this.getLeasesStatus()
this.leasesId = res.data
formData.tenant.map(async (li, index) => {
if (li.id === '') {
// return
console.log(1206)
await this.addPeopleMethods(li, index)
} else {
console.log(1209)
// return
await this.bindCheckIn(li, index)
}
})
this.dialogVisible = false
} else {
this.$message.error(res.message)
this.dialogVisible = false
}
})
}
} else {
this.$message.error('该人员已有合约,请重新选择')
}
})
},
getcheckInList() {
var data = {
ids: [this.form.tenant[0].id]
}
httpPost(data, this.$api.getTenant).then(res => {
if (res.code == 200) {
this.checkInListing = res.data
} else {
this.checkInListing = []
}
})
},
// 绑定房间
bindsave() {
console.log('绑定房间')
var fjid = [];
var _this = this
var time1 = moment(this.form.signingTime).valueOf() / 1000
var time2 = moment(this.form.contractTime).valueOf() / 1000
if (time1 == '' || time2 == '') {
this.$message.error("请选择开始结束时间")
return false;
}
if (time1 > time2) {
this.$message.error('开始时间不能大于结束时间')
return false
}
var str = {
cardId: this.form.tenant[0].id,
siteId: this.form.roomId,
startTime: time1,
endTime: time2
};
fjid = [str];
if (this.form.manufactureId == 201 || this.form.manufactureId == 221) {
var data = {
lockerId: this.form.deviceNum,
imei: this.form.imei,
lockerUserId: this.form.tenant[0].userPassword,
keyId: this.form.tenant[0].userPassword,
role: 0,
action: 1,
order: 6226,
cardName: this.form.tenant[0].name,
roomName: this.form.roomName
};
ICINLocker.addUserToLock(data.lockerId, data.imei, data
.lockerUserId, data.role, data.action, data.order, data.cardName, data
.roomName, (
callback) => {
console.log("12", callback)
if (callback.success) {
var locakUserdata = {
deviceNum: this.form.deviceNum,
imei: this.form.imei,
cardId: this.form.tenant[0].id,
content: JSON.stringify(
data
), //operateMode:NFC-10、把人员添加到凭证-1
type: 26,
serial: callback.data.serialNumber,
startTime: time1,
endTime: time2,
}
utils.sendLockUser(locakUserdata, (callbackLOCK) => {
console.log(callbackLOCK)
if (callbackLOCK.success) {
// 录入凭证
this.savevoucherlist.map(li => {
this.bindsave1(li)
})
}
})
} else {
this.$message.error(callback.msg);
if (callback.code == 201016) {
httpPost(fjid, this.$api.bindCard).then((res) => {
if (res.success) {
this.getcheckInList()
this.getAboutRoom();
this.$message.success("用户门锁已存在")
} else {
this.$message.error("添加失败")
}
});
}
}
})
httpPost(fjid, this.$api.bindCard).then((res) => {
console.log(res)
if (res.success) {
this.getAboutRoom();
this.getcheckInList()
} else {
this.$message.error("添加失败")
}
});
} else if (this.form.manufactureId == 101) {
var userstr = {
imei: this.form.imei,
deviceNum: this.form.deviceNum,
userTelephone: this.form.tenant[0].userTelephone,
userPassword: this.form.tenant[0].userPassword,
password: this.form.tenant[0].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.form.tenant[0].name,
roomName: this.form.roomName
};
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: this.form.deviceNum,
imei: this.form.imei,
cardId: this.form.tenant[0].id,
content: JSON.stringify(
userstr
), //operateMode:NFC-10、把人员添加到凭证-1
type: 26,
serial: callback.data.serialNumber,
startTime: time1,
endTime: time2,
}
utils.sendLockUser(locakUserdata, (callbackLOCK) => {
})
httpPost(fjid, this.$api.bindCard).then((res) => {
if (res.success) {
this.getAboutRoom();
this.getcheckInList()
} else {
this.$message.error("添加失败")
}
});
} else {
this.$message.error(callback.msg);
}
})
} else if (this.form.manufactureId == 1201) {
httpPost(fjid, this.$api.bindCard).then((res) => {
if (res.success) {
this.getAboutRoom();
this.getcheckInList()
} else {
this.$message.error("添加失败")
}
});
}
},
// 查询和人员相关的房间
getAboutRoom() {
httpGet("", this.$api.onlyTenant).then((res) => {
this.$store.commit("getAboutRoom", res.data.list);
});
},
// 添加人员
saveEdit() {
const info = localStorage.getItem('info')
// 添加人员的凭证保存
let phone = this.form.tenant[0].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: "",
cardState: 1,
info: JSON.stringify(infostr),
name: this.form.tenant[0].name,
number: this.form.tenant[0].number,
phone: this.form.tenant[0].phone,
sex: parseInt(this.form.tenant[0].sex),
enterpriseId: info.enterpriseId,
type: info.type,
};
RequestSet.addPeople(data, (callback) => {
console.log(callback)
if (callback.success) {
// 绑定房间
// this.bindsave()
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 => {
})
httpGet("", this.$api.onlyTenant).then((res) => {
this.$store.commit("getAboutRoom", res.data.list);
});
} else {
}
})
if (this.WhetherToGreatAnAccount) {
const info = localStorage.getItem('info')
var enterpriseName = info.enterpriseId
if (enterpriseName) {
var addform = {
username: this.form.tenant[0].number,
phone: this.form.tenant[0].phone,
password: this.form.tenant[0].phone.substring(this.form.tenant[0].phone.length - 6, this.form.tenant[0].phone.length),
userType: 3,
identity: 3,
tenantId: this.$store.state.tenantId,
enterpriseName: enterpriseName.name,
enterpriseId: info.enterpriseId
}
httpPost(addform, this.$api.addUser).then((res3) => {
console.log(res3)
if (res3.success) {
this.$message.success("创建账号成功")
// 绑定房间
this.bindsave()
} else {
this.$message.error("创建账号失败")
}
})
} else {
this.$message.error("请选择所属部门")
}
}
},
// 绑定入住
bindCheckIn(li, index) {
if (this.form.manufactureId === 201 || this.form.manufactureId === 221) {
ICINLocker.addUserToLock(this.form.deviceNum, this.form.imei, li.userPassword, '0', '1', '6226', li.name, this.form.roomName, (callback) => {
if (callback.success) {
let data = [{
cardId: li.id,
siteId: this.form.roomId,
startTime: this.form.signingTime,
endTime: this.form.contractTime
}]
httpPost(data, this.$api.bindCard).then(async (res1) => {
if (res1.success) {
await this.savevoucherlist.map(li => {
this.bindsave1(li)
})
}
})
let userStr = {
lockerId: this.form.deviceNum,
imei: this.form.imei,
lockerUserId: li.userPassword,
keyId: li.userPassword,
userTelephone: li.userTelephone,
userPassword: li.userPassword,
role: 0,
action: 1,
order: 6226,
cardName: li.name,
roomName: this.form.roomName
};
let lockUserData = {
deviceNum: this.form.deviceNum,
imei: this.form.imei,
cardId: li.id,
content: JSON.stringify(
userStr
),
type: 26,
serial: callback.data.serialNumber,
startTime: this.form.signingTime.getTime() / 1000,
endTime: this.form.contractTime.getTime() / 1000,
}
utils.sendLockUser(lockUserData, (callbackLOCK) => {
// if (callbackLOCK.success) {
// this.saveEdit()
// }
})
} else {
this.$message.error(callback.msg)
}
})
} else if (this.form.manufactureId === 101) {
let passWordStartTime = moment(this.form.signingTime).format("YYYYMMDDHHmmss")
let passWordEndTime = moment(this.form.contractTime).format("YYYYMMDDHHmmss")
ICINLocker.LDAddUser(this.form.deviceNum, this.form.imei, li.userTelephone,
li.userPassword, li.userPassword, passWordStartTime, passWordEndTime, 26, 6226, li.name, this.form.roomName, false, (callback) => {
if (callback.success) {
let data = [{
cardId: li.id,
siteId: this.form.roomId,
startTime: this.form.signingTime,
endTime: this.form.contractTime
}]
httpPost(data, this.$api.bindCard).then((res1) => {
})
let userStr = {
lockerId: this.form.deviceNum,
imei: this.form.imei,
lockerUserId: li.userPassword,
keyId: li.userPassword,
userTelephone: li.userTelephone,
userPassword: li.userPassword,
role: 0,
action: 1,
order: 6226,
cardName: li.name,
roomName: this.form.roomName
};
let lockUserData = {
deviceNum: this.form.deviceNum,
imei: this.form.imei,
cardId: li.id,
content: JSON.stringify(
userStr
),
type: 26,
serial: callback.data.serialNumber,
startTime: this.form.signingTime.getTime() / 1000,
endTime: this.form.contractTime.getTime() / 1000,
}
utils.sendLockUser(lockUserData, (callbackLOCK) => {
// if (callbackLOCK.success) {
// this.saveEdit()
// }
})
} else {
this.$message.error(callback.msg)
}
})
}
},
// 添加新人员
async addPeopleMethods(item, index) {
console.log("测试")
let info = JSON.parse(localStorage.getItem('info'))
let infoStr = {
userTelephone: item.phone,
userPassword: item.phone.substring(item.phone.length - 6, item.phone.length),
userId: item.phone.substring(item.phone.length - 6, item.phone.length),
keyId: item.phone.substring(item.phone.length - 6, item.phone.length)
};
let data = {
cardId: '',
cardState: 1,
info: JSON.stringify(infoStr),
name: item.name,
number: item.number,
phone: item.phone,
sex: parseInt(item.sex),
enterpriseId: info.enterpriseId,
type: 0,
};
RequestSet.addPeople(data, (callback) => {
if (callback.success) {
let leasesData = [
{
id: this.leasesId,
cardId: callback.data
}
]
setTimeout(() => {
httpPost(leasesData, this.$api.postUpdateLeases).then(res => { })
}, 1000)
let ids = {
ids: [callback.data]
}
this.form.tenant[index].id = callback.data //新增人员id加入数据源
this.form.tenant[index].userTelephone = infoStr.userTelephone
this.form.tenant[index].userPassword = infoStr.userPassword
this.form.tenant[index].userId = infoStr.userId
this.form.tenant[index].keyId = infoStr.keyId
httpPost(ids, this.$api.createkeyCard).then(res => {
})
this.bindCheckIn(this.form.tenant[index], index)
} else {
this.$message.error("123", callback.message)
}
})
},
// 删除同住人
deleteCohabitant(index) {
this.form.tenant.splice(index, 1)
},
// 添加同住人
addCohabitant() {
let sourceData = {
id: '',
name: '',
phone: '',
number: '',
cardType: 1,
sex: '',
place: '',
address: '',
tenantType: '',
subsidy: '',
userTelephone: '',
userPassword: '',
userId: '',
keyId: ''
}
this.form.tenant.push(sourceData)
},
// 选择房间
async selectRoom(index, row) {
let repeatStatus = utils.isRepeat(this.form.tenant)
if (repeatStatus) {
this.$message.warning('同住人员有重复的表单信息,请填写正确表单信息')
this.activeNames = '1'
} else {
let dataList = this.form.tenant
let resultStatus = true
for (let i = 0; i < dataList.length; i++) {
if (dataList[i].number === '' || dataList[i].phone === '' || dataList[i].name === '' || dataList[i].cardType === '') {
resultStatus = false
}
}
if (!resultStatus) {
this.$message.warning('请正确填写签约人表单信息')
this.activeNames = '1'
} else {
this.form.roomName = row.path
this.form.roomId = row.id
this.form.acreage = row.acreage
this.form.layout = row.layout
await this.getDeviceInfo()
}
}
},
// 获取房间对应设备信息
getDeviceInfo() {
let q = {
roomIds: [this.form.roomId]
}
let data = {
q: JSON.stringify(q),
pageNum: 1,
pageSize: 1,
};
httpPost(data, this.$api.getDeviceItems).then((res) => {
if (res.success) {
if (res.data.list.length > 0) {
this.form.deviceNum = res.data.list[0].deviceNum
this.form.imei = res.data.list[0].imei
this.form.manufactureId = res.data.list[0].manufactureId
this.activeNames = '3'
} else {
this.form.roomId = ''
this.form.roomName = ''
this.form.acreage = ''
this.form.layout = ''
this.$message.error('该房间还未绑定设备,请绑定设备后进行入住')
}
} else {
this.$message.error(res.message)
}
})
},
// 搜索房源
searchRoom() {
let q = {
name: this.form.roomNameSearch,
ancestor: this.checkNodeId,
isRoom: 1
};
let data = {
q: JSON.stringify(q),
type: 0,
pageNum: 1,
pageSize: 10
};
httpGet(data, this.$api.getSiteList).then(res => {
if (res.success) {
res.data.list.list.map(li => {
let name = utils.findIndexArray(this.roomList, li.id, [])
let layoutText = li.layout === 0 ? '单间' : li.layout === 1 ? '一室一厅' : li.layout === 2 ? '两室一厅' : '三室一厅'
let path = ''
if (name) {
path = name.join('/')
}
li['layoutText'] = layoutText
li['path'] = path
})
this.tableDataRom = res.data.list.list
} else {
this.$message.error(res.message)
}
})
},
// 搜索对应人员
searchPeople(index) {
if (!utils.verificationPhone(this.form.tenant[index].phone) && this.form.tenant[index].phone.length > 0) {
this.$message.error('手机格式错误')
}
if (IdentityCodeValid(this.form.tenant[index].number)) {
this.$message.error('身份证号错误')
}
let q = {
number: this.form.tenant[index].number,
phone: this.form.tenant[index].phone,
};
let data = {
pageNum: 1,
pageSize: 10,
orderBy: "create_time desc",
q: JSON.stringify(q),
};
httpPost(data, this.$api.getlistNum).then((res1) => {
if (res1.success) {
if (res1.data.list.length > 0) {
let personInfo = JSON.parse(res1.data.list[0].info)
this.form.tenant[index].id = res1.data.list[0].id
this.form.tenant[index].phone = res1.data.list[0].phone
this.form.tenant[index].number = res1.data.list[0].number
this.form.tenant[index].sex = res1.data.list[0].sex
this.form.tenant[index].name = res1.data.list[0].name
this.form.tenant[index].userTelephone = personInfo.userTelephone
this.form.tenant[index].userPassword = personInfo.userPassword
this.form.tenant[index].userId = personInfo.userId
this.form.tenant[index].keyId = personInfo.keyId
} else {
this.form.tenant[index].id = ''
this.form.tenant[index].phone = ''
this.form.tenant[index].number = ''
this.form.tenant[index].sex = ''
this.form.tenant[index].name = ''
this.form.tenant[index].userTelephone = ''
this.form.tenant[index].userPassword = ''
this.form.tenant[index].userId = ''
this.form.tenant[index].keyId = ''
this.$message.error("未找到人员")
}
} else {
this.$message.error(res1.message)
}
})
},
// 获取房源
getAllTree() {
let data = {};
httpGet(data, this.$api.getTree).then((res) => {
let userList = [];
let temp = {},
arr = [];
res.data.forEach((item, index) => {
if (!temp[item.id]) {
arr.push(item);
temp[item.id] = true;
}
});
arr.map((li) => {
if (li.expand) {
if (JSON.parse(li.expand).type == "0") {
userList.push(li);
}
}
});
let list = res.data.sort((pre, cur) => pre.id - cur.id)
let arrData = uniqueArray1(list, "id")
this.roomList = ztreeToElementTree(arrData, {});
});
},
// 选择房源
async checkNode(e) {
this.checkNodeId = e[e.length - 1]
let options = this.roomList
let arr = await this.getId(options, e[e.length - 1])
let listArr = [arr[0]]
let obj = this.getNodeId(listArr)
this.form.roomId = obj
this.searchRoom()
},
getId(list, id) {
for (let i in list) {
if (list[i].id == id) {
return [list[i]]
}
if (list[i].children) {
let node = this.getParentId(list[i].children, id);
if (node !== undefined) {
return node;
}
}
}
},
getNodeId(list, newNodeId = []) {
for (let i in list) {
newNodeId.push(list[i].id)
if (list[i].children) {
this.getNodeId(list[i].children, newNodeId);
}
}
return newNodeId;
},
getParentId(list, id) {
for (let i in list) {
if (list[i].id == id) {
return [list[i]]
}
if (list[i].children) {
let node = this.getParentId(list[i].children, id);
if (node !== undefined) {
return node.concat(list[i])
}
}
}
},
// 签约
signContract() {
this.dialogVisible = true
// this.getAllTree()
},
// 保存凭证
savevoucher() {
if (this.value2[0] == '' || this.value2[1] == '') {
return this.$message.error('开始时间和结束时间不能为空')
}
if (this.value2[0] > this.value2[1]) {
return this.$message.error('开始时间不能大于结束时间')
}
if (this.value2[0] < this.form.signingTime || this.value2[0] > this.form.contractTime) {
return this.$message.error('开始时间不能超出祖约时间')
}
if (this.value2[1] < this.form.signingTime || this.value2[1] > this.form.contractTime) {
return this.$message.error('结束时间不能超出租约时间')
}
if (this.documentType == 11) {
var fingerprintAlias = ''
var fingerprint = localStorage.getItem("fingerprint");
let pzname = '指纹' + this.voucherlist.length + 1
var name = this.form.tenant[0].name
if (this.savevoucherlist.length != 0) {
this.savevoucherlist.map(li => {
if (li.fingerprintAlias != this.voucher.fingerprintAlias) {
fingerprintAlias = this.voucher.fingerprintAlias
let data = {
fingerprint: fingerprint,
pzname: pzname,
name: name,
fingerprintAlias: fingerprintAlias,
type: 11,
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
} else {
return this.$message.error('该凭证已保存')
}
})
} else {
fingerprintAlias = this.voucher.fingerprintAlias
let data = {
fingerprint: fingerprint,
pzname: pzname,
name: name,
fingerprintAlias: fingerprintAlias,
type: 11,
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
}
} else if (this.documentType == 12) {
var password = ''
if (this.savevoucherlist.length != 0) {
this.savevoucherlist.map(li => {
if (li.password != this.voucher.idcard) {
if (this.voucher.idcard.length == 0) {
return this.$message.error('请输入身份证号')
} else if (this.voucher.idcard.length == 16) {
password = this.voucher.idcard
} else {
password = dec2hex(this.voucher.idcard)
}
var pzname = '身份证' + this.voucherlist.length + 1
var name = this.form.tenant[0].name
let data = {
pzname: pzname,
name: name,
type: 12,
password: password.toUpperCase(),
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
} else {
return this.$message.error('该凭证已保存')
}
})
} else {
if (this.voucher.idcard.length == 0) {
return this.$message.error('请输入身份证号')
} else if (this.voucher.idcard.length == 16) {
password = this.voucher.idcard
} else {
password = dec2hex(this.voucher.idcard)
}
var pzname = '身份证' + this.voucherlist.length + 1
var name = this.form.tenant[0].name
let data = {
pzname: pzname,
name: name,
type: 12,
password: password.toUpperCase(),
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
}
} else if (this.documentType == 13) {
var nfc = ''
if (this.savevoucherlist.length != 0) {
this.savevoucherlist.map(li => {
if (li.password != this.voucher.nfc) {
if (this.voucher.nfc.length == 0) {
return this.$message.error('请输入NFC')
} else if (this.voucher.nfc.length == 8) {
var nfc = this.voucher.nfc
} else {
var array3 = dec2hex(this.voucher.nfc)
var arr4 = group(array3, 2)
arr4.map((li) => {
nfc += li
})
}
var pzname = 'NFC' + this.savevoucherlist.length + 1
var name = this.form.tenant[0].name
let data = {
pzname: pzname,
name: name,
type: 13,
password: nfc.toUpperCase(),
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
} else {
return this.$message.error('该凭证已存在')
}
})
} else {
if (this.voucher.nfc.length == 0) {
return this.$message.error('请输入NFC')
} else if (this.voucher.nfc.length == 8) {
var nfc = this.voucher.nfc
} else {
var array3 = dec2hex(this.voucher.nfc)
var arr4 = group(array3, 2)
arr4.map((li) => {
nfc += li
})
}
var pzname = 'NFC' + this.savevoucherlist.length + 1
var name = this.form.tenant[0].name
let data = {
pzname: pzname,
name: name,
type: 13,
password: nfc.toUpperCase(),
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
}
} else if (this.documentType == 14) {
if (this.savevoucherlist.length != 0) {
this.savevoucherlist.map(li => {
if (li.password != this.voucher.password) {
if (this.voucher.password.length != 6) {
return this.$message.error('密码长度为6位')
} else if (this.voucher.password == 0) {
return this.$message.error('请输入密码')
}
var pzname = '密码' + this.savevoucherlist.length + 1
var name = this.form.tenant[0].name
let data = {
pzname: pzname,
password: this.voucher.password,
type: 14,
name: name,
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
} else {
return this.$message.error('该凭证已存在')
}
})
} else {
if (this.voucher.password.length != 6) {
return this.$message.error('密码长度为6位')
} else if (this.voucher.password == 0) {
return this.$message.error('请输入密码')
}
var pzname = '密码' + this.savevoucherlist.length + 1
var name = this.form.tenant[0].name
let data = {
pzname: pzname,
password: this.voucher.password,
type: 14,
name: name,
passWordStartTime: moment(this.value2[0]).format('YYYY-MM-DD HH:mm:ss'),
passWordEndTime: moment(this.value2[1]).format('YYYY-MM-DD HH:mm:ss')
}
this.savevoucherlist.push(data)
}
} else if (this.documentType == 15) {
}
},
// 删除凭证
deletefun(index, row) {
this.savevoucherlist = this.savevoucherlist.filter(li => {
console.log(li, row)
return li.password == row.password
})
},
// 录入凭证
bindsave1(li) {
let str = {};
let cardName = this.form.tenant[0].name,
pzname = '';
let sort = this.getTypeSort(this.roomtable1, li.type)
if (li.type == 11 && li.fingerprintAlias == '') {
this.$message.error("请选择指纹别名");
return false
}
if (li.type == 11) {
var fingerprint = li.fingerprint;
var indexofstr = fingerprint.indexOf(',')
if (indexofstr != -1) {
var array = fingerprint.split(",");
var num = this.Bytes2Str(array);
fingerprint = num
}
str = {
username: li.name,
pzname: li.pzname,
userTelephone: this.form.tenant[0].userTelephone,
userPassword: this.form.tenant[0].userPassword,
keyId: this.form.tenant[0].keyId || '',
userId: this.form.tenant[0].userId || '',
fingerprintAlias: li.fingerprintAlias,
password: "",
passwordStartTime: li.passWordStartTime,
passwordEndTime: li.passWordEndTime,
operateMode: 16,
order: 6216,
fingerprint: li.fingerprint,
};
} else if (li.type == 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: li.name,
pzname: li.pzname,
userTelephone: this.form.tenant[0].userTelephone,
userPassword: this.form.tenant[0].userPassword,
keyId: this.form.tenant[0].keyId || '',
userId: this.form.tenant[0].userId || '',
operateMode: 13,
order: 6213,
password: li.password, //this.voucher.idcard,
passwordStartTime: li.passWordStartTime,
passwordEndTime: li.passWordEndTime,
is: false,
};
} else if (li.type == 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: li.name,
pzname: li.pzname,
operateMode: 10,
order: 6210,
userTelephone: this.form.tenant[0].userTelephone,
userPassword: this.form.tenant[0].userPassword,
keyId: this.form.tenant[0].keyId || '',
userId: this.form.tenant[0].userId || '',
password: li.password, //this.voucher.nfc,
passwordStartTime: li.passWordStartTime,
passwordEndTime: li.passWordEndTime,
is: false
};
} else if (li.type == 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: li.name,
pzname: li.pzname,
// imei: this.deviceList[0].imei,
password: li.password,
userTelephone: this.form.tenant[0].userTelephone,
userPassword: this.form.tenant[0].userPassword,
keyId: this.form.tenant[0].keyId || '',
userId: this.form.tenant[0].userId || '',
operateMode: 7,
order: 6207,
passwordStartTime: moment(li.passWordStartTime).format('YYYYMMDDHHmmss'),
passwordEndTime: moment(li.passWordEndTime).format('YYYYMMDDHHmmss'),
is: false,
};
} else if (li.type == 15) {
}
var data = {
cardId: this.form.tenant[0].id,
content: JSON.stringify(str),
type: li.type,
startTime: moment(li.passWordStartTime).format('YYYYMMDDHHmmss'),
endTime: moment(li.passWordEndTime).format('YYYYMMDDHHmmss')
};
httpPost(data, this.$api.addCertificates).then(async (res) => {
this.$message.success('添加成功')
// 下发凭证
await this.savevoucherlist.map(li => {
this.sendVoucher(li)
})
});
},
// 选择房源,下发凭证
sendVoucher(li) {
console.log(li)
let phone = this.form.tenant[0].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 roomAbout = this.$store.state.roomAbout
var fjid = [];
var resultArr = this.AboutDevice.filter(
(_item) => _item.roomId == this.form.roomId
)[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, li);
} else if (resultArr.manufactureId == 101) {
var room = roomAbout.filter(item => item.roomId == resultArr.roomId)[0]
resultArr.roomName = room.roomName
this.putCarfid(resultArr, li);
} else if (resultArr.manufactureId == 1201) {
var room = roomAbout.filter(item => item.roomId == resultArr.roomId)[0]
resultArr.roomName = room.roomName
this.putCarfidLwj(resultArr, li);
}
}
} else {
this.$message.error("该房间未绑定门锁")
}
},
// 下发凭证
putCarfidzg(resultArr, row) {
var phone = this.form.tenant[0].phone
var data = {};
var userTelephone = phone.substring(phone.length - 6, phone.length);
var userPassword = phone.substring(phone.length - 6, phone.length);
var startTime = new Date(row.passWordStartTime).getTime() / 1000
var endTime = new Date(row.passWordEndTime).getTime() / 1000
var passwordStartTime = new Date(row.passWordStartTime).getTime() / 1000
var passwordEndTime = new Date(row.passWordEndTime).getTime() / 1000
// var passwordStartTime = JSON.stringify(row.startTime)
// var passwordEndTime = JSON.stringify(row.endTime)
// var sort=this.getTypeSort(this.roomtable1,row.type)
var pzname = row.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 = row.fingerprint;
var str = {
imei: resultArr.imei,
deviceNum: resultArr.deviceNum,
fingerprintAlias: row.fingerprintAlias,
userTelephone: userTelephone,
userPassword: userPassword,
password: row.password,
length: fingerprint1.length / 2,
fpTimeId: fpId.getTime(),
operateMode: 16,
type: 1,
order: 6216,
fingerprint: fingerprint1,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
pzname: row.pzname,
cardName: row.name + '-' + (pzname ? pzname : ''),
roomName: resultArr.roomName
};
var data3 = {
lockerId: resultArr.deviceNum,
imei: resultArr.imei,
order: 6216,
lockerUserId: phone.substring(phone.length - 6, phone.length),
keyId: phone.substring(phone.length - 6, phone.length),
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.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error(callback.msg)
}
})
} else if (row.type == 12) {
if (row.password.length != 16) {
this.$message.error("卡格式错误,请重新录入")
return
}
// if(pzname==''){
// pzname='身份证'+sort
// }
var str = {
imei: resultArr.imei,
userTelephone: userTelephone,
cardId: this.form.tenant[0].id,
userPassword: userPassword,
password: row.password,
operateMode: 13,
order: 6213,
type: 2,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
pzname: row.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: row.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.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error(callback.msg)
}
})
} else if (row.type == 13) {
var password = ""
if (row.password.length == 8) {
password = utils.cardFormatConversion(row.password)
password = password + '00000000'
} else if (row.password.length == 16) {
password = row.password
} else {
this.$message.error("卡格式错误,请重新录入")
return
}
// if(pzname==''){
// pzname='NFC'+sort
// }
var str = {
imei: resultArr.imei,
userTelephone: userTelephone,
cardId: this.form.tenant[0].id,
userPassword: userPassword,
password: password,
operateMode: 10,
type: 3,
order: 6210,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
pzname: row.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.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error(callback.msg)
}
})
} else if (row.type == 14) {
// if(pzname==''){
// pzname='密码'+sort
// }
str = {
imei: resultArr.imei,
userTelephone: userTelephone,
cardId: this.form.tenant[0].id,
userPassword: userPassword,
password: row.password,
operateMode: 7,
order: 6207,
type: 4,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
pzname: row.pzname,
is: false,
cardName: row.name + '-' + (pzname ? pzname : ''),
roomName: resultArr.roomName
};
let data3 = {
lockerId: resultArr.deviceNum,
imei: resultArr.imei,
order: 6207,
passwordCount: 255,
lockerUserId: userPassword,
keyId: userPassword,
startTime: passwordStartTime,
endTime: passwordEndTime,
action: 1,
password: row.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) => {
console.log(callback)
if (callback.success) {
var data = {
cardId: this.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error(callback.msg)
}
})
}
},
putCarfidLwj(resultArr, row) {
var phone = this.form.tenant[0].phone
var userTelephone = phone.substring(phone.length - 6, phone.length);
var userPassword = phone.substring(phone.length - 6, phone.length);
var startTime = new Date(row.passWordStartTime).getTime() / 1000
var endTime = new Date(row.passWordEndTime).getTime() / 1000
var passwordStartTime = new Date(row.passWordStartTime).getTime() / 1000
var passwordEndTime = new Date(row.passWordEndTime).getTime() / 1000
var pzname = row.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 = row.fingerprint;
var str = {
imei: resultArr.imei,
deviceNum: resultArr.deviceNum,
fingerprintAlias: row.fingerprintAlias,
userTelephone: userTelephone,
userPassword: userPassword,
password: row.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: row.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.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error(res.msg)
}
})
} if (row.type == 13) {
var password = ""
if (row.password.length == 8) {
password = utils.cardFormatConversion(row.password)
password = password + '00000000'
} else if (row.password.length == 16) {
password = row.password
} else {
this.$message.error("卡格式错误,请重新录入")
return
}
let startTime = new Date(row.passWordStartTime).getTime() / 1000
let endTime = new Date(row.passWordEndTime).getTime() / 1000
let data = {
code: "lwj/cardOperate",
data: {
lockerId: resultArr.deviceNum,
lockerUserId: row.userPassword,
action: 1,
cardNo: row.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: row.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.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error(callback.msg)
}
})
} else if (row.type == 14) {
if (row.password == '') {
this.$message.error('密码不能为空')
} else {
let startTime = new Date(row.passWordStartTime).getTime() / 1000
let endTime = new Date(row.passWordEndTime).getTime() / 1000
let data = {
code: "lwj/passwordOperate",
data: {
lockerId: resultArr.deviceNum,
lockerUserId: row.userPassword,
action: 1,
password: row.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: this.form.tenant[0].id,
userPassword: userPassword,
password: row.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.form.tenant[0].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) => {
console.log(res)
// this.getcertificate(); //获取凭证
});
} else {
this.$message.error("123123123", callback.msg)
}
})
}
}
},
// 下发凭证
putCarfid(resultArr, row) {
var data = {};
var phone = this.form.tenant[0].phone
var userTelephone = phone.substring(phone.length - 6, phone.length);
var userPassword = phone.substring(phone.length - 6, phone.length);
var startTime = new Date(row.passWordStartTime).getTime() / 1000
var endTime = new Date(row.passWordEndTime).getTime() / 1000
var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
// var sort=this.getTypeSort(this.roomtable1,row.type)
var pzname = row.pzname || ''
if (row.type == 11) {
// if(pzname==''){
// pzname='指纹'+sort
// }
var fpId = new Date();
var fingerprint = row.fingerprint;
// var array = fingerprint.split(",");
// var num = this.Bytes2Str(array);
// return
var str = {
imei: resultArr.imei,
deviceNum: resultArr.deviceNum,
fingerprintAlias: row.fingerprintAlias,
userTelephone: userTelephone,
userPassword: userPassword,
password: row.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.form.tenant[0].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: this.form.tenant[0].id,
userPassword: userPassword,
password: row.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: this.form.tenant[0].id,
userPassword: userPassword,
password: row.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: this.form.tenant[0].id,
userPassword: userPassword,
password: row.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.form.tenant[0].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)
}
})
},
// 凭证列表获取
getcertificate() {
if (this.form.roomId) {
var t = {
roomIds: this.form.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.form.tenant[0].id,
deviceNum: res.data.list[0].deviceNum,
imei: this.form.imei,
status: "0,1,104",
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.form.id,
deviceNum: this.form.deviceNum,
imei: this.form.imei,
// type: this.credentialSearch.type,
types: "10,11,12,13,14"
},
};
this.getfilterAcquisition(data)
}
},
getfilterAcquisition(data) {
var dataall = {
pageNum: 0,
pageSize: 0,
orderBy: "create_at desc",
q: {
cardId: this.form.tenant[0].id,
deviceNum: "",
imei: "",
status: "",
types: "0,1,2,3,4"
},
}
httpGet(dataall, this.$api.getCertificates).then((resall) => {
console.log(resall)
if (resall.code == 200) {
var sendOn = utils.zlib_unzip(resall.data)
var sendstatus = true
if (resall.data.total == 0) {
sendstatus = false
}
this.voucherlist = sendOn
this.voucherlist.map(li => {
li.content = JSON.parse(li.content)
})
}
})
},
// 删除凭证
deletefun1(index, row) {
var that = this
this.$confirm("此操作将删除凭证记录,请确认!", "提示", {
type: "warning",
}).then(() => {
let pzid = []
pzid.push(row.id)
if (row.type == 11) {
var pzname = row.content.pzname || ''
var data6 = {
pageNum: 1,
pageSize: 10,
orderBy: "create_at desc",
q: JSON.stringify({
info: {
pzname: pzname
},
cardId: this.form.tenant[0].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 = row.content.password
var data6 = {
pageNum: 1,
pageSize: 10,
orderBy: "create_at desc",
q: JSON.stringify({
info: {
password: password
},
cardId: this.form.tenant[0].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();
}
});
}
})
}
})
},
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;
},
getTypeSort(data, type) {
var num = 1
data.map(li => {
if (li.type == type) {
num++
}
})
return num
},
// 批量删除
batchDeleteMethods() {
if (this.multipleSelection.length === 0) {
this.$message.error('请选择批量删除合约')
} else {
this.$confirm("是否先进行批量删除?", "提示", {
type: "warning",
}).then(() => {
let ids = []
this.multipleSelection.map(li => {
ids.push(li.id)
})
let list = {
ids: ids
}
httpPost(list, this.$api.postDeleteLeases).then(res => {
if (res.success) {
this.$message.success('删除成功')
this.getLeasesList()
this.getLeasesStatus()
} else {
this.$message.error(res.message)
}
})
})
}
},
// 批量退租
batchLeaseCancellationMethods() {
if (this.multipleSelection.length === 0) {
this.$message.error('请选择批量退租合约')
} else {
this.$confirm("是否先进行批量退租?", "提示", {
type: "warning",
}).then(() => {
this.rentingMultipleMethods()
})
}
},
// 退租
rentOutOperation(index, row) {
this.multipleSelection = [row]
this.$confirm("是否先进行退租?", "提示", {
type: "warning",
}).then(() => {
this.rentingMultipleMethods()
})
},
// 退租方法
rentingMultipleMethods() {
let _this = this
this.multipleSelection.map(li => {
this.getRoomIdDeviceInfo(li.siteId).then(res => {
if (res.data.total > 0) {
if (res.data.list[0].manufactureId === 201 || res.data.list[0].manufactureId === 221) {
RequestSet.unbindPeopleAndRooms(li.cardId, res.data.list[0].imei, (callback) => {
if (callback.success) {
let dataOne = utils.zlib_unzip(callback.data)
if (dataOne.length > 0) {
let lookUserInfo = JSON.parse(dataOne[0].content)
let dataLook = {
lockerId: dataOne[0].deviceNum,
imei: dataOne[0].imei,
lockerUserId: lookUserInfo.lockerUserId,
keyId: lookUserInfo.keyId,
role: 0,
action: 2, //1--添加、2--删除、3--修改
order: 6203,
cardName: lookUserInfo.cardName,
roomName: lookUserInfo.roomName
}
httpPost(dataLook, _this.$api.ZGduserOperation).then(res2 => {
if (res2.success) {
let dataUnbind = [{
siteId: li.siteId,
cardId: li.cardId,
}]
httpPost(dataUnbind, _this.$api.unbindCard).then((res) => {
_this.$message.success("退租成功")
let refundLeasesData = [
{
id: li.id,
status: 3
}
]
httpPost(refundLeasesData, _this.$api.postUpdateLeases).then(res => { })
_this.getLeasesList()
_this.getLeasesStatus()
})
} else {
_this.$message.error(res2.msg)
}
})
}
} else {
_this.$message.error(callback.msg)
}
})
} else if (res.data.list[0].manufactureId === 101) {
RequestSet.unbindPeopleAndRooms(li.cardId, res.data.list[0].imei, (callback) => {
if (callback.success) {
let dataOne = utils.zlib_unzip(callback.data)
let lookUserInfo = JSON.parse(dataOne[0].content)
let str = {
imei: dataOne[0].imei,
deviceNum: dataOne[0].deviceNum,
userTelephone: lookUserInfo.userTelephone,
userPassword: lookUserInfo.userPassword,
operateMode: 3,
order: 6203,
password: "20210816",
cardName: lookUserInfo.cardName,
roomName: lookUserInfo.roomName,
is: false,
};
httpPost(str, _this.$api.getDeviceOperateUserInfo).then(
(res1) => {
if (res1.success) {
let dataUnbind = [{
siteId: li.siteId,
cardId: li.cardId,
}]
httpPost(dataUnbind, _this.$api.unbindCard).then((res) => {
_this.$message.success("退租成功")
let refundLeasesData = [
{
id: li.id,
status: 3
}
]
httpPost(refundLeasesData, _this.$api.postUpdateLeases).then(res => { })
_this.getLeasesList()
_this.getLeasesStatus()
})
} else {
_this.$message.error(res1.msg)
}
})
} else {
_this.$message.error(callback.msg)
}
})
}
} else {
this.$notify({
title: '警告',
message: `该合约房间(${li.address})没有找到对应房间信息`,
duration: 0,
type: 'warning'
})
return false;
}
})
})
},
// 根据房间id获取设备信息
getRoomIdDeviceInfo(roomId) {
let _this = this
return new Promise(function (resolve, reject) {
let q = {
roomIds: [roomId]
}
let data = {
q: JSON.stringify(q),
pageNum: 1,
pageSize: 1,
};
httpPost(data, _this.$api.getDeviceItems).then((res) => {
resolve(res)
})
})
},
// 多选
handleSelectionChange(value) {
this.multipleSelection = value;
},
// 关闭签约弹窗
handleClose() {
this.dialogVisible = false
},
handleCloseExport() {
this.dialogVisibleExport = false
},
// 重置搜索
restSearch() {
this.search = {
name: '',
phone: '',
status: '',
signingTime: '',
contractTime: '',
siteIds: ''
}
},
// 搜索
handleSearch() {
this.getLeasesList()
},
// 设置每页数量
handleSizeChange(val) {
this.pageSize = val
this.getLeasesList()
},
// 跳转页码
handleCurrentChange(val) {
this.pageNum = val
this.getLeasesList()
}
}
}
</script>
<style scoped>
.width50 {
width: 50px;
}
.width120 {
width: 120px;
}
.width200 {
width: 200px;
}
.width150 {
width: 150px;
}
.mr10 {
margin-right: 10px;
}
.container .el-button+.el-button,
.container .el-checkbox.is-bordered+.el-checkbox.is-bordered {
margin-left: 0;
}
.widthRem5 {
/* display: inline-block; */
width: 5rem;
}
</style>