2024-05-01 17:19:25 +08:00

4148 lines
142 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="administration">
<div class="left2 whiteBlock">
<div class="placeholder"></div>
<div class="left_list">
<div style="margin: 15px 0">
<el-select
size="medium"
@change="
checkedId = 0;
getHierarchyEnterpriseList();
"
v-model="enterpriseTypeId"
:placeholder="$t('message.laborMange.formOfBusiness')"
style="width: 120px"
:clearable="true"
>
<el-option
v-for="item in enterpriseTypeList"
:key="item.id"
:label="item.companyTypeName"
:value="item.id"
></el-option>
</el-select>
<el-input
:placeholder="$t('message.laborMange.placeholder1')"
v-model="enterpriseName"
size="medium"
style="margin-left: 10px; width: 220px"
@keyup.enter.native="getHierarchyEnterpriseList"
>
<i
slot="suffix"
class="el-input__icon el-icon-search"
@click="getHierarchyEnterpriseList"
style="cursor: pointer"
></i>
</el-input>
</div>
<div class="list_content">
<div
v-if="enterpriseListData.length > 0"
class="flex content_data"
:class="checkedId == item.id && 'checkedName'"
@click="checkeEnterprise(item)"
v-for="item in enterpriseListData"
:key="item.id"
>
<div
:class="
checkedId == item.id ? 'enterpriseName' : 'enterpriseName2'
"
>
{{ item.enterpriseName }}
</div>
<!-- 编辑和删除企业 -->
<div class="flex2" v-if="checkedId == item.id">
<img
v-permission="{key: 'rygl_editCompany', moduleName: '人员管理'}"
src="@/assets/images/icon-edit.png"
style="margin-right: 16px"
class="icon"
@click="editEnterpriseInfo(item)"
/>
<img
v-permission="{key: 'rygl_deleteCompany', moduleName: '人员管理'}"
src="@/assets/images/icon-delete.png"
class="icon"
@click="deleteEnterpriseInfo(item)"
/>
</div>
</div>
<el-tree
:data="enterpriseTreeData"
node-key="id"
ref="treeNode"
label="enterpriseName"
:expand-on-click-node="false"
:default-expand-all="true"
@node-click="checkeEnterprise"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span>{{ data.enterpriseName }}</span>
<!-- <div class="flex2" v-if="checkedId == data.id">-->
<!-- <img-->
<!-- src="@/assets/images/icon-edit.png"-->
<!-- style="margin-right: 16px"-->
<!-- class="icon"-->
<!-- @click="editEnterpriseInfo(data)"-->
<!-- />-->
<!-- <img-->
<!-- src="@/assets/images/icon-delete.png"-->
<!-- class="icon"-->
<!-- @click="deleteEnterpriseInfo(data)"-->
<!-- />-->
<!-- </div>-->
</span>
</el-tree>
<!-- <div v-if="enterpriseTreeData.length == 0" style="margin-top: 50%">
<img
src="@/assets/images/noData.png"
style="width: 80px; height: 80px"
/>
<div style="color: #ccd9fa; margin-top: 5px">
{{ $t("message.laborMange.noData") }}
</div>
</div> -->
</div>
</div>
<!-- <div class="addFirm">
<el-button
size="medium"
type="primary"
plain
icon="el-icon-plus"
@click="addEnterpriseBtn"
>{{ $t("message.laborMange.theNewEnterprise") }}</el-button
>
</div> -->
</div>
<div class="right2" style="width: 100%; margin-left: 0" v-if="refreshPage">
<div class="title whiteBlock flex">
<span>{{ $t("message.laborMange.crewInfo") }}</span>
<div class="team_number flex2">
{{ $t("message.laborMange.section") }}
<span class="number" style="margin-right: 50px">{{
teamListData.totalDepartmentNum
}}</span>
{{ $t("message.laborMange.crew") }}
<span class="number">{{ teamListData.totalWorkerNum }}</span>
</div>
</div>
<!-- <div class="title flex whiteBlock">
<span>{{ showEnterpriseName }}</span>
<div class="team_number flex2">
{{ $t("message.laborMange.team") }}
<span class="number" style="margin-right: 50px">{{
teamListData.totalTeamNum
}}</span>
{{ $t("message.laborMange.crew") }}
<span class="number">{{ teamListData.totalWorkerNum }}</span>
</div>
</div> -->
<div class="team_list whiteBlock flex2">
<!-- 新增部门 -->
<el-button
v-permission="{key: 'rygl_addDepartment', moduleName: '人员管理'}"
type="primary"
plain
icon="el-icon-plus"
class="team_addBtn"
@click="addTeamBtn"
v-if="enterpriseListData.length > 0"
>{{ $t("message.laborMange.newDepartment") }}</el-button
>
<div
class="flex2 list_wrap"
:class="showTeamList ? 'show_teamList' : 'height_79'"
@click="hideTeamList"
>
<div
class="list"
:class="checkedTeamId == 0 && 'checkedTeam'"
@click="switchoverTeam(0)"
>
<div>{{ $t("message.laborMange.allDepartments") }}</div>
<div style="margin: 4px 0">
{{ teamListData.totalWorkerNum }}
</div>
<i class="el-icon-arrow-down" style="font-size: 17px"></i>
</div>
<div
class="list"
:class="checkedTeamId == item.id && 'checkedTeam'"
v-if="teamListData.list.length > 0"
v-for="item in teamListData.list"
:key="item.id"
@click="switchoverTeam(item.id)"
>
<el-popover
placement="top"
min-width="80"
v-if="String(item.departmentName).length >= 5"
trigger="hover"
>
{{ item.departmentName }}
<div slot="reference">{{ item.departmentName }}</div>
</el-popover>
<div v-else>{{ item.departmentName }}</div>
<div style="margin: 4px 0">{{ item.workerNum }}</div>
<el-popover placement="bottom" min-width="80" trigger="hover">
<div style="margin: 0; text-align: center">
<!-- 编辑部门 -->
<div
v-permission="{key: 'rygl_editDepartment', moduleName: '人员管理'}"
style="cursor: pointer; margin-bottom: 5px"
@click="editTeamInfo(item)"
>
<img
src="@/assets/images/icon-edit.png"
style="margin-right: 5px"
/>
<span>{{ $t("message.laborMange.edit") }}</span>
</div>
<!-- 删除部门 -->
<div v-permission="{key: 'rygl_deleteDepartment', moduleName: '人员管理'}" style="cursor: pointer" @click="deleteTeamInfo(item)">
<img
src="@/assets/images/icon-delete.png"
style="margin-right: 5px"
/>
<span>{{ $t("message.laborMange.delete") }}</span>
</div>
</div>
<div slot="reference">
<i class="el-icon-arrow-down" style="font-size: 17px"></i>
</div>
</el-popover>
</div>
</div>
<i
class="el-icon-more-outline"
@click="showTeamList = true"
v-if="!showTeamList && teamListData.totalDepartmentNum > 0"
style="font-size: 26px; cursor: pointer; color: #999"
></i>
</div>
<div class="laborComponent_table_wrap whiteBlock">
<div class="search_wrap" :class="{ flex: COMPANY != 'nanchang' }">
<!-- 人员导入 -->
<el-button
v-permission="{key: 'rygl_inputPerson', moduleName: '人员管理'}"
type="primary"
size="medium"
@click="personnelEntry"
:disabled="checkedTeamId == 0"
>{{ $t("message.laborMange.personnelEntry") }}</el-button
>
<!-- 导出模板 -->
<el-button v-permission="{key: 'rygl_exportTemplate', moduleName: '人员管理'}" type="primary" size="medium" @click="exportM">{{
$t("message.laborMange.export") + $t("message.laborMange.template")
}}</el-button>
<el-upload
style="display: inline-block; margin-left: 5px"
class="upload-demo"
name="excelFile"
:action="
$http.defaults.baseURL + 'xmgl/workerInfo/uploadExcelWorkerInfo'
"
:on-change="handleChangeE"
:on-success="handleSuccessE"
:on-error="handleErrorE"
:show-file-list="false"
:headers="headers"
:data="{ projectSn: $store.state.projectSn }"
:limit="1"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
:auto-upload="true"
>
<!-- 批量导入 -->
<el-button v-permission="{key: 'rygl_input_pl', moduleName: '人员管理'}" size="medium" type="primary">{{
$t("message.laborMange.bulkImport")
}}</el-button>
</el-upload>
<!-- 导入图片 -->
<el-button
v-permission="{key: 'rygl_ImportPhotos', moduleName: '人员管理'}"
size="medium"
@click="importImgOpen()"
type="primary"
style="margin-left: 5px"
>导入照片</el-button
>
<el-button
v-permission="{key: 'rygl_distributeAccessEquipment', moduleName: '人员管理'}"
size="medium"
@click="passEquipment()"
type="primary"
style="margin-left: 5px"
>下发通行设备</el-button
>
<br />
<el-form
:inline="true"
:model="tableParameter"
size="medium"
class="demo-form-inline"
>
<el-form-item :label="$t('message.laborMange.workingState')">
<el-select
v-model="tableParameter.inserviceType"
style="width: 120px"
>
<el-option
:label="$t('message.laborMange.all')"
value
></el-option>
<el-option
:label="$t('message.laborMange.onJob')"
value="1"
></el-option>
<el-option
:label="$t('message.laborMange.dimission')"
value="2"
></el-option>
</el-select>
</el-form-item>
<el-form-item
:label="$t('message.laborMange.healthCodeStatus')"
v-if="COMPANY == 'nanchang'"
>
<el-select v-model="tableParameter.codeState" style="width: 80px">
<el-option
:label="$t('message.laborMange.all')"
value
></el-option>
<el-option
:label="$t('message.laborMange.codeless')"
value="0"
></el-option>
<el-option
:label="$t('message.laborMange.redCode')"
value="1"
></el-option>
<el-option
:label="$t('message.laborMange.yellowCode')"
value="2"
></el-option>
<el-option
:label="$t('message.laborMange.greenCode')"
value="3"
></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('message.laborMange.compellation')">
<el-input
style="width: 120px"
v-model="tableParameter.workerName"
:placeholder="$t('message.laborMange.placeholder2')"
></el-input>
</el-form-item>
<el-form-item :label="$t('message.laborMange.IdNumber')">
<el-input
style="width: 120px"
v-model="tableParameter.idCard"
:placeholder="$t('message.laborMange.placeholder2')"
></el-input>
</el-form-item>
<el-form-item :label="$t('message.laborMange.dateOfEntry')">
<el-date-picker
style="width: 120px"
v-model="tableParameter.enterDate"
type="date"
:placeholder="$t('message.laborMange.pleaseChoose')"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button v-permission="{key: 'rygl_query', moduleName: '人员管理'}" type="primary" @click="inquireBtn" plain>{{
$t("message.laborMange.inquire")
}}</el-button>
<!-- 刷新 -->
<el-button v-permission="{key: 'rygl_refresh', moduleName: '人员管理'}" type="warning" @click="refreshBtn" plain>{{
$t("message.laborMange.refresh")
}}</el-button>
<el-button v-permission="{key: 'rygl_drive', moduleName: '人员管理'}" type="primary" @click="exportFn">{{
$t("message.laborMange.export")
}}</el-button>
<el-button
type="primary"
:disabled="checkedWorker.length == 0"
@click="issuePersonFn"
v-if="key"
>{{ $t("message.laborMange.aKeyIssued") }}</el-button
>
</el-form-item>
</el-form>
</div>
<vue-scroll style="height: calc(100% - 120px)">
<el-table
ref="multipleTable"
:data="tableListData"
tooltip-effect="dark"
style="width: 100%; color: #737996"
@selection-change="handleCheckedCitiesChange"
:show-header="false"
:row-class-name="tableRowClassName"
>
<el-table-column
type="selection"
width="55"
:selectable="selectEnable"
></el-table-column>
<el-table-column prop="workerName">
<template slot-scope="scope">
<div class="flex2">
<img
style="width: 51px; height: 72px; margin-right: 40px"
:src="fileUrl + scope.row.fieldAcquisitionUrl"
v-if="scope.row.fieldAcquisitionUrl"
@click="
handlePreview(fileUrl + scope.row.fieldAcquisitionUrl, 0)
"
/>
<div>
<!-- 部门人员信息 -->
<el-button
type="text"
style="font-size: 18px"
@click="viewDetails(scope.row)"
>{{ scope.row.workerName }}</el-button
>
<el-tag
v-if="COMPANY == 'nanchang'"
:type="parseCode(scope.row.codeState)[0]"
size="small"
style="margin-left: 10px"
>{{ parseCode(scope.row.codeState)[1] }}</el-tag
>
<div>
<span>{{
scope.row.sex == 1
? $t("message.laborMange.man")
: $t("message.laborMange.female")
}}</span>
<span style="margin: 0 5px"
>{{ scope.row.age
}}{{ $t("message.laborMange.age") }}</span
>
<span>{{ scope.row.nation }}</span>
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="phoneNumber">
<template slot-scope="scope">
<div>
{{ $t("message.laborMange.contactNumber") }}
<span class="values">{{ scope.row.phoneNumber }}</span>
</div>
<div class="personItemBottom">
{{ $t("message.laborMange.department") }}
<span class="values">{{ scope.row.departmentName }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="enterDate">
<template slot-scope="scope">
<div>
{{ $t("message.laborMange.dateOfEntry") }}
<span class="values">{{ scope.row.enterDate }}</span>
</div>
<div class="personItemBottom">
{{ $t("message.laborMange.workingState") }}
<span class="values">{{
scope.row.inserviceType == 1
? $t("message.laborMange.onJob")
: $t("message.laborMange.dimission")
}}</span>
</div>
</template>
</el-table-column>
<!-- 测试 -->
<el-table-column prop="sendSuccessStatus">
<template v-slot="{ row }">
<div>
下发状态:
<span
:class="[
'valuesColor',
row.sendSuccessStatus === 1
? 'green'
: row.sendSuccessStatus === 2
? 'red'
: row.sendSuccessStatus === 3
? 'yellow'
: '',
]"
>
{{
row.sendSuccessStatus === 1
? "成功"
: row.sendSuccessStatus === 2
? "失败"
: row.sendSuccessStatus === 3
? "部分成功"
: ""
}}</span
>
</div>
<div class="personItemBottom">
所属企业:
<span class="values">{{ row.enterpriseName }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="address" width="300px">
<template slot-scope="scope">
<div class="tableBtns">
<el-button
size="medium"
type="text"
class="operationText"
@click="issueTeamEvent(scope.row.id)"
>查看下发详情</el-button
>
<!-- 人员退场 -->
<el-button
class="operationText"
type="text"
size="medium"
@click="workerExitBtn(scope.row, 1)"
v-if="scope.row.inserviceType == 1"
>{{ $t("message.laborMange.bowOutWith") }}</el-button
>
<!-- <div
class="operationText"
@click="editWorkerInfo(scope.row, 1)"
v-if="scope.row.inserviceType==1"
>
<img src="@/assets/images/icon-edit.png" style="margin-right:5px" />
<span>{{$t('message.laborMange.edit')}}</span>
</div> -->
<!-- 再次进场 -->
<el-button
class="operationText"
type="text"
size="medium"
@click="editWorkerInfo(scope.row, 2)"
v-if="scope.row.inserviceType == 2"
>{{ $t("message.laborMange.toPlayAgain") }}</el-button
>
<!-- 人员删除 -->
<div
class="operationText"
@click="removeWorkerInfo(scope.row)"
>
<img
src="@/assets/images/icon-delete.png"
style="margin-right: 5px"
/>
<span>{{ $t("message.laborMange.delete") }}</span>
</div>
<!-- 此处注释是因为当时的需求 '上传到住建局' 和 '一键下发' 的按钮要去掉 所以更改判断条件-->
<!-- <el-button
type="primary"
size="mini"
@click="issuePersonOneFn(scope.row.id)"
v-if="scope.row.inserviceType == 1"
>{{ $t("message.laborMange.aKeyIssued") }}</el-button
> -->
<!-- <div v-if="isUploadToHouse" class="personItemBottom">
<el-checkbox
v-model="scope.row.isUploadHousing"
:checked="scope.row.isUploadHousing == 1 ? true : false"
@change="
uploadToHouseFn(scope.row.isUploadHousing, scope.row.id)
"
>{{ $t("message.laborDev.uploadToGover") }}</el-checkbox
>
</div> -->
<el-button
type="primary"
size="mini"
@click="issuePersonOneFn(scope.row.id)"
v-if="key"
>{{ $t("message.laborMange.aKeyIssued") }}</el-button
>
</div>
<div v-if="key">
<el-checkbox
v-model="scope.row.isUploadHousing"
:checked="scope.row.isUploadHousing == 1 ? true : false"
:indeterminate="
scope.row.isUploadHousing == 1 ? true : false
"
@change="
uploadToHouseFn(scope.row.isUploadHousing, scope.row.id)
"
>{{ $t("message.laborDev.uploadToGover") }}</el-checkbox
>
</div>
</template>
</el-table-column>
</el-table>
</vue-scroll>
<div class="flex table_wrap_bottom">
<div>
<el-checkbox
:indeterminate="isIndeterminate"
v-model="checkAll"
@change="handleCheckAllChange"
:disabled="checkAllStatus"
></el-checkbox>
<el-button
type="text"
class="table_wrap_btn"
:disabled="checkedWorker.length <= 0"
@click="batchMove"
>{{ $t("message.laborMange.batchMobile") }}</el-button
>
<el-button
type="text"
:disabled="checkedWorker.length <= 0"
@click="workerExitBtn(checkedWorker, 2)"
>{{ $t("message.laborMange.batchBowOutWith") }}</el-button
>
</div>
<div>
<el-pagination
class="pagerBox"
style="margin-top: 0;margin-right: 600px;"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(total)"
background
></el-pagination>
</div>
</div>
</div>
</div>
<!-- 照片导入弹框 -->
<el-dialog
class="importImgDialog"
:modal-append-to-body="false"
title="导入照片"
:close-on-click-modal="false"
:visible.sync="imgImportDialog"
width="668px"
>
<div class="import-content">
<div class="alarm-content">
<i class="el-icon-warning-outline"></i>
<div>
向目标组织下批量导入人员正面免冠照,导入前建议使用人脸照片预处理工具进行质量清洗,并确认照片对应的人员信息是否存在。
</div>
</div>
<div class="import-operation">
<span>导入文件:</span>
<div>
<!-- :action="
$http.defaults.baseURL + 'xmgl/workerInfo/uploadWorkerInfoImgs'
" -->
<el-upload
class="upload-demo"
drag
name="files"
:action="$store.state.UPLOADURL"
:multiple="false"
:on-exceed="handleExceed"
:on-success="handleImportSuccess"
:file-list="imgFileList"
accept=".zip"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或<em>点击上传</em>
</div>
</el-upload>
</div>
</div>
<div
class="upload-tip"
:style="{ 'margin-top': imgFileList.length > 0 ? '40px' : '5px' }"
>
支持导入200MB以内的ZIP文件建议文件中包含照片的数量在1000张以内
照片命名规则为姓名_证件号码jpg需露出眉毛和眼睛单张照片文件大小10
KB~200 KB。
</div>
<div class="upload-tip-sub">
选择文件后将自动上传并进行数据校验
</div>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="addEnterpriseDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t("message.laborMange.cancel") }}</el-button
>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveImportFn()"
size="medium"
>导入</el-button
>
</div>
</div>
</el-dialog>
<!-- 新增 || 编辑 人员录入弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="personDialogTitle"
:visible.sync="addPersonDialog"
:close-on-click-modal="false"
width="969px"
>
<vue-scroll style="height: 618px">
<div class="dialog_content addPerson_content" ref="personDialog">
<div class="fixed_title" style="padding-top: 5px">
{{ $t("message.laborMange.essential") }}
</div>
<el-form
size="small"
ref="personForm"
label-position="top"
:model="personForm"
label-width="80px"
:rules="personFormRules"
>
<el-row :gutter="24">
<el-col :span="16">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.compellation')"
prop="workerName"
>
<el-input
v-model="personForm.workerName"
:placeholder="$t('message.laborMange.placeholder2')"
:disabled="titleType == 'detail'"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.frontAndBackOfIdCard')"
prop="idCardUpPhotoUrl"
:rules="[
{
// required:
// !personForm.idCardUpPhotoUrl ||
// !personForm.idCardDownPhotoUrl,
message: $t('message.laborMange.compellation'),
trigger: 'submit',
},
]"
>
<div class="flex3" style="width: 160px">
<div>
<div
v-if="personForm.idCardUpPhotoUrl"
style="
position: relative;
width: 60px;
height: 38px;
"
>
<img
:src="fileUrl + personForm.idCardUpPhotoUrl"
style="width: 60px; height: 38px"
@click="
handlePreview(
fileUrl + personForm.idCardUpPhotoUrl,
0
)
"
/>
<img
v-if="
personForm.idCardUpPhotoUrl &&
titleType != 'detail'
"
src="@/assets/images/shut_icon.png"
width="15px"
height="15px"
class="shut_icon"
@click="shutIconBtn(2)"
/>
</div>
<el-upload
v-else
class="upload-demo identity_card"
:action="uploadUrl"
:on-remove="(file) => handleRemove(file, 1)"
:on-success="(file) => handleSuccess(file, 1)"
:on-error="(file) => handleError(file, 1)"
:on-preview="(file) => handlePreview(file, 1)"
:beforeUpload="
(file) => handleBeforeUpload(file, 1)
"
name="files"
:class="titleType == 'detail' ? 'margin_top35' : ''"
:file-list="idCardUpPhotoUrlFile"
:disabled="titleType == 'detail'"
:show-file-list="false"
>
<img src="@/assets/images/cockade.png" />
<!-- <el-button type="primary" v-if="personDialogTitle!='管理人员信息详情'">上传国徽面</el-button> -->
</el-upload>
</div>
<div>
<div
v-if="personForm.idCardDownPhotoUrl"
style="
position: relative;
width: 60px;
height: 38px;
"
>
<img
:src="fileUrl + personForm.idCardDownPhotoUrl"
style="width: 60px; height: 38px"
@click="
handlePreview(
fileUrl + personForm.idCardDownPhotoUrl,
0
)
"
/>
<img
v-if="
personForm.idCardDownPhotoUrl &&
titleType != 'detail'
"
src="@/assets/images/shut_icon.png"
width="15px"
height="15px"
class="shut_icon"
@click="shutIconBtn(3)"
/>
</div>
<el-upload
v-else
class="upload-demo identity_card"
:action="uploadUrl"
:on-remove="(file) => handleRemove(file, 2)"
:on-success="(file) => handleSuccess(file, 2)"
:on-error="(file) => handleError(file, 2)"
:on-preview="(file) => handlePreview(file, 2)"
:beforeUpload="
(file) => handleBeforeUpload(file, 2)
"
name="files"
:class="titleType == 'detail' ? 'margin_top35' : ''"
:file-list="idCardDownPhotoUrlFile"
:disabled="titleType == 'detail'"
:show-file-list="false"
>
<img src="@/assets/images/portrait.png" />
<!-- <el-button type="primary" v-if="personDialogTitle!='管理人员信息详情'">上传人像面</el-button> -->
</el-upload>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.dateOfEntry')"
prop="enterDate"
>
<el-date-picker
v-model="personForm.enterDate"
type="date"
:placeholder="
$t('message.laborMange.pleaseSelectADate')
"
value-format="yyyy-MM-dd"
style="width: 100%"
:disabled="titleType == 'detail'"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.IdNumber2')"
prop="idCard"
>
<el-input
v-model="personForm.idCard"
:disabled="titleType == 'detail'"
@change="changeIdCard"
maxlength="18"
:placeholder="$t('message.laborMange.placeholder2')"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.phone')"
prop="phoneNumber"
>
<el-input
v-model="personForm.phoneNumber"
:placeholder="$t('message.laborMange.placeholder2')"
:disabled="titleType == 'detail'"
oninput="if(value.length>11)value=value.slice(0,11)"
type="number"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('message.laborMange.mailbox')">
<el-input
v-model="personForm.personMail"
:placeholder="
titleType != 'detail' &&
$t('message.laborMange.placeholder2')
"
:disabled="titleType == 'detail'"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.sex')"
prop="sex"
>
<el-radio-group
v-model="personForm.sex"
:disabled="titleType == 'detail'"
>
<el-radio :label="1">{{
$t("message.laborMange.man")
}}</el-radio>
<el-radio :label="2">{{
$t("message.laborMange.female")
}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.politicsStatus')"
prop="politicsStatus"
>
<el-select
v-model="personForm.politicsStatus"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
v-if="
titleType != 'detail' ||
(personForm.politicsStatus && titleType == 'detail')
"
:disabled="titleType == 'detail'"
>
<el-option
:label="$t('message.laborMange.memberOfChina')"
:value="1"
></el-option>
<el-option
:label="$t('message.laborMange.memberYouthLeague')"
:value="2"
></el-option>
<el-option
:label="$t('message.laborMange.ordinaryResident')"
:value="3"
></el-option>
<el-option
:label="$t('message.laborMange.otherParty')"
:value="4"
></el-option>
</el-select>
<el-input v-else :disabled="true"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.maritalStatus')"
prop="marry"
>
<el-select
v-model="personForm.marry"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
v-if="
titleType != 'detail' ||
(personForm.marry && titleType == 'detail')
"
>
<el-option
:label="$t('message.laborMange.spinsterhood')"
:value="1"
></el-option>
<el-option
:label="$t('message.laborMange.married')"
:value="2"
></el-option>
<el-option
:label="$t('message.laborMange.divorced')"
:value="3"
></el-option>
<el-option
:label="$t('message.laborMange.widowed')"
:value="4"
></el-option>
</el-select>
<el-input v-else :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('message.laborMange.dateOfBirth')">
<el-date-picker
v-model="personForm.birthday"
type="date"
:placeholder="
$t('message.laborMange.pleaseSelectADate')
"
value-format="yyyy-MM-dd"
style="width: 100%"
:disabled="titleType == 'detail'"
v-if="
titleType != 'detail' ||
(personForm.birthday && titleType == 'detail')
"
></el-date-picker>
<el-input v-else :disabled="true"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.nation')"
prop="nation"
>
<el-select
v-model="personForm.nation"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
>
<el-option
v-for="(item, index) in nationList"
:key="index"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.educationBackground')"
prop="educational"
>
<el-select
v-model="personForm.educational"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
v-if="
titleType != 'detail' ||
(personForm.educational && titleType == 'detail')
"
>
<el-option
:label="$t('message.laborMange.primarySchool')"
value="1"
></el-option>
<el-option
:label="$t('message.laborMange.juniorHighSchool')"
value="2"
></el-option>
<el-option
:label="$t('message.laborMange.technicalSchool')"
value="3"
></el-option>
<el-option
:label="$t('message.laborMange.seniorHighSchool')"
value="4"
></el-option>
<el-option
:label="$t('message.laborMange.juniorCollege')"
value="5"
></el-option>
<el-option
:label="$t('message.laborMange.regularCollegeCourse')"
value="6"
></el-option>
<el-option
:label="$t('message.laborMange.graduateStudent')"
value="7"
></el-option>
<el-option
:label="$t('message.laborMange.doctor')"
value="8"
></el-option>
<el-option
:label="$t('message.laborMange.postdoctor')"
value="9"
></el-option>
</el-select>
<el-input v-else :disabled="true"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.nativePlace')"
prop="nativePlace"
>
<el-input
v-model="personForm.nativePlace"
:placeholder="
titleType != 'detail' &&
$t('message.laborMange.placeholder2')
"
:disabled="titleType == 'detail'"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.issuingAuthority')"
prop="issuingAuthorityForIdcard"
>
<el-input
v-model="personForm.issuingAuthorityForIdcard"
:disabled="titleType == 'detail'"
:placeholder="
titleType != 'detail' &&
$t('message.laborMange.pleaseAuthority')
"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.effectiveDate')"
:prop="
personForm.longTerm || personForm.longTerm == 1
? ''
: 'idCardEndDate'
"
>
<el-date-picker
v-model="personForm.idCardEndDate"
v-if="personForm.longTerm != 1 || !personForm.longTerm"
:placeholder="
personForm.longTerm
? ''
: $t('message.laborMange.pleaseSelectADate')
"
value-format="yyyy-MM-dd"
style="width: 75%"
:disabled="personForm.longTerm || titleType == 'detail'"
></el-date-picker>
<el-input
v-else
v-model="personForm.idCardEndDate"
style="width: 75%"
:disabled="true"
></el-input>
<el-checkbox
v-model="personForm.longTerm"
:disabled="titleType == 'detail'"
@change="checkboxLongTerm"
style="margin-left: 10px"
>{{ $t("message.laborMange.longTime") }}</el-checkbox
>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.workingState')"
prop="inserviceType"
>
<el-select
v-model="personForm.inserviceType"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="true"
>
<el-option
:label="$t('message.laborMange.onJob')"
:value="1"
></el-option>
<el-option
:label="$t('message.laborMange.dimission')"
:value="2"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.emergencyContact')"
prop="emergentPerson"
:rules="[
{
// required: true,
message: $t(
'message.laborMange.pleaseEnterAnEmergencyContact'
),
trigger: 'blur',
},
]"
>
<el-input
v-model="personForm.emergentPerson"
:placeholder="$t('message.laborMange.placeholder2')"
:disabled="titleType == 'detail'"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.emergencyContactPhone')"
prop="emergentPhone"
:rules="[
{
// required: true,
message: $t(
'message.laborMange.pleaseEnterAnEmergencyContactPhone'
),
trigger: 'blur',
},
]"
>
<el-input
v-model="personForm.emergentPhone"
:placeholder="$t('message.laborMange.placeholder2')"
:disabled="titleType == 'detail'"
oninput="if(value.length>11)value=value.slice(0,11)"
type="number"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<!-- 银行卡发卡行 -->
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.cardBank')"
prop="payRollBankName"
>
<el-input
v-model="personForm.payRollBankName"
:placeholder="
personForm.payRollBankName == '' &&
titleType == 'detail'
? ''
: $t('message.laborMange.placeholder2')
"
:disabled="titleType == 'detail'"
></el-input>
</el-form-item>
</el-col>
<!-- 银行卡卡号 -->
<el-col :span="12">
<el-form-item
:label="$t('message.laborMange.bankCardNumber')"
prop="payRollBankNumber"
>
<el-input
v-model="personForm.payRollBankNumber"
:disabled="titleType == 'detail'"
:placeholder="
personForm.payRollBankNumber == '' &&
titleType == 'detail'
? ''
: $t('message.laborMange.placeholder2')
"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="人员定位标签号" prop="locationCardno">
<el-input
v-model="personForm.locationCardno"
placeholder="请输入标签号"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="8">
<el-row :gutter="24">
<el-button
type="primary"
size="medium"
style="
margin-left: 30px;
width: 120px;
text-align: center;
padding: 9px 12px;
"
@click="turnOnTheCamera(1)"
v-if="titleType != 'detail'"
>{{ $t("message.laborMange.idCardInformation") }}</el-button
>
<el-button
size="medium"
type="primary"
style="
margin-left: 17px;
width: 109px;
text-align: center;
padding: 9px 18px;
"
@click="turnOnTheCamera(2)"
v-if="titleType != 'detail'"
>{{ $t("message.laborMange.turnCamera") }}</el-button
>
<el-button
size="medium"
type="primary"
style="
width: 82%;
margin: 15px 0 18px 30px;
background: #09c2aa;
border-color: #09c2aa;
"
@click="downloadPlugIn"
v-if="titleType != 'detail'"
>{{ $t("message.laborMange.highBeatDownload") }}</el-button
>
<el-row :gutter="24">
<el-col :span="10" :offset="2">
<div
style="position: relative; width: 100px; height: 119px"
>
<img
v-if="personForm.idCardBigPhotoUrl"
:src="fileUrl + personForm.idCardBigPhotoUrl"
@click="
handlePreview(
fileUrl + personForm.idCardBigPhotoUrl,
0
)
"
width="100%"
height="100%"
/>
<img
v-else
src="@/assets/images/profile_photo.png"
width="100%"
height="100%"
/>
<img
v-if="
personForm.idCardBigPhotoUrl &&
titleType != 'detail'
"
src="@/assets/images/shut_icon.png"
width="15px"
height="15px"
class="shut_icon"
@click="shutIconBtn(0)"
/>
</div>
<div style="margin: 4px 0">
<!-- <span style="color: #f76c6c">*</span> -->
<div style="width: 100px;text-align: center;">
{{ $t("message.laborMange.IdCardHead") }}
</div>
</div>
<el-upload
action="uploadUrl"
:on-remove="(file) => handleRemove(file, 3)"
:on-preview="(file) => handlePreview(file, 3)"
:beforeUpload="(file) => handleBeforeUpload(file, 3)"
:show-file-list="false"
:file-list="idCardBigPhotoUrlFile"
list-type="picture"
:http-request="
(val) => handleUpload(val, 'idCardAvatar')
"
>
<el-button
size="medium"
style="padding: 9px 20px"
type="primary"
v-if="titleType != 'detail'"
>{{
$t("message.laborMange.clickOnTheUpload")
}}</el-button
>
</el-upload>
</el-col>
<el-col :span="11" :offset="1">
<div
style="position: relative; width: 100px; height: 119px"
>
<img
v-if="personForm.fieldAcquisitionUrl"
:src="fileUrl + personForm.fieldAcquisitionUrl"
@click="
handlePreview(
fileUrl + personForm.fieldAcquisitionUrl,
0
)
"
width="100%"
height="100%"
/>
<img
v-else
src="@/assets/images/profile_photo.png"
width="100%"
height="100%"
/>
<img
v-if="
personForm.fieldAcquisitionUrl &&
titleType != 'detail'
"
src="@/assets/images/shut_icon.png"
width="15px"
height="15px"
class="shut_icon"
@click="shutIconBtn(1)"
/>
</div>
<div style="margin: 4px 0">
<span style="color: #f76c6c">*</span>
<!-- <div style="width: 100px;text-align: center;"> -->
{{ $t("message.laborMange.spotFaceCollection") }}
<!-- </div> -->
</div>
<el-upload
action="uploadUrl"
:on-remove="(file) => handleRemove(file, 4)"
:on-preview="(file) => handlePreview(file, 4)"
:beforeUpload="(file) => handleBeforeUpload(file, 4)"
list-type="picture"
:show-file-list="false"
:file-list="fieldAcquisitionUrlFile"
:http-request="(val) => handleUpload(val, 'livesFace')"
>
<el-button
size="medium"
style="padding: 9px 20px"
type="primary"
v-if="titleType != 'detail'"
>{{
$t("message.laborMange.clickOnTheUpload")
}}</el-button
>
</el-upload>
</el-col>
</el-row>
</el-row>
<el-col :span="22" :offset="2" class="hint">{{
$t("message.laborMange.imgHint")
}}</el-col>
</el-col>
</el-row>
<div class="fixed_title" style="margin-top: 10px">
{{ $t("message.laborMange.jobInfo") }}
</div>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item
:label="$t('message.laborMange.companies')"
prop="enterpriseId"
:disabled="true"
>
{{ showEnterpriseName }}
<!-- <el-select
v-model="personForm.enterpriseId"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
>
<el-option
v-if="enterpriseListData.length > 0"
v-for="item in enterpriseListData"
:key="item.id"
:label="item.enterpriseName"
:value="item.id"
></el-option>
</el-select> -->
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item
:label="$t('message.laborMange.positionType')"
prop="jobType"
>
<el-select
v-model="personForm.jobType"
:disabled="titleType == 'detail'"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
>
<el-option-group
v-for="group in dutuiesType"
:key="group.dictionaryName"
:label="group.dictionaryName"
>
<el-option
v-for="item in group.options"
:key="item.id"
:label="item.dictionaryName"
:value="item.id + ''"
></el-option>
</el-option-group>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item
:label="$t('message.laborMange.position')"
prop="jobName"
>
<el-select
v-model="personForm.jobName"
:disabled="titleType == 'detail'"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
>
<el-option
v-for="item in dutuies"
:key="item.id"
:label="item.dictionaryName"
:value="item.id + ''"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item
:label="$t('message.laborMange.attendanceNumber')"
prop="attendanceNumber"
>
<el-input
:disabled="titleType == 'detail'"
v-model="personForm.attendanceNumber"
:placeholder="$t('message.laborMange.placeholder2')"
></el-input> </el-form-item
></el-col>
<el-col :span="8">
<el-form-item
:label="$t('message.laborMange.attendanceRules')"
prop="ruleId"
>
<el-select
v-model="personForm.ruleId"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
>
<el-option
v-for="(item, index) in attendRulesList"
:key="index"
:label="item.ruleName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<div class="type-change">
<el-radio-group v-model="typeRadio">
<el-radio :label="1">设备</el-radio>
<el-radio :label="2">分组</el-radio>
</el-radio-group>
</div>
<el-row
:gutter="24"
v-if="typeRadio == 1"
style="padding: 0px 12px;"
>
<el-form-item
:label="$t('message.laborMange.faceDevice')"
prop="ufaceDevList"
>
<el-checkbox
:indeterminate="isIndeterminate2"
v-model="checkAllFaceDev"
@change="handleCheckAllChangeFace"
>{{ $t("message.laborMange.checkAll") }}</el-checkbox
>
<el-checkbox-group
v-model="personForm.ufaceDevId"
@change="handleUfaceDevChange"
>
<el-checkbox
v-for="(item, index) in ufaceDevAllList"
:key="item.id"
:label="item.id"
:disabled="item.disabled"
>
{{ item.devName }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-row>
<el-row
:gutter="24"
v-if="typeRadio == 2"
style="padding: 0px 12px;"
>
<el-form-item label="人脸分组" prop="ufaceDevList">
<el-checkbox
:indeterminate="isIndeterminate3"
v-model="checkAllGroupDev"
@change="handleCheckAllChangeGroup"
>{{ $t("message.laborMange.checkAll") }}</el-checkbox
>
<el-checkbox-group
key="group2"
v-model="personForm.ufaceDevGroupId"
@change="handleUGroupChange"
>
<el-checkbox
v-for="(item, index) in uGroupAllList"
:key="index"
:label="item.id"
:disabled="item.disabled"
>
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-row>
</el-form>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="addPersonDialog = false"
icon="el-icon-circle-close"
size="medium"
>
{{ $t("message.laborMange.cancel") }}
<!-- 取消 -->
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="savePersonFn('personForm')"
size="medium"
:disabled="titleType == 'detail'"
>
{{ $t("message.laborMange.confirm") }}
<!-- 确定 -->
</el-button>
</div>
</div>
</vue-scroll>
</el-dialog>
<!-- 新增 部门 弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="teamDialogTitle"
:visible.sync="addDepartmentDialog"
:close-on-click-modal="false"
width="667px"
>
<div class="dialog_content">
<el-form
size="medium"
ref="departmentForm"
:model="departmentForm"
label-width="120px"
class="dialogFormBox"
>
<el-form-item :label="$t('message.laborMange.companies')">
{{ showEnterpriseName }}
<!-- <el-select
v-model="departmentForm.enterpriseId"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
>
<el-option
v-for="item in enterpriseListData"
:key="item.id"
:label="item.enterpriseName"
:value="item.id"
></el-option>
</el-select> -->
</el-form-item>
<el-form-item
:label="$t('message.laborMange.industryTitle')"
:rules="[
{
required: true,
message: $t('message.laborMange.theNameOfTheDepartment'),
trigger: 'blur',
},
]"
>
<el-input
v-model="departmentForm.departmentName"
:placeholder="$t('message.laborMange.placeholder2')"
></el-input>
</el-form-item>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="addDepartmentDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t("message.laborMange.cancel") }}</el-button
>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveDepartmentFn('departmentForm')"
size="medium"
>{{ $t("message.laborMange.confirm") }}</el-button
>
</div>
</el-form>
</div>
</el-dialog>
<!-- 批量 移动 弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="$t('message.laborMange.mobileWorkers')"
:visible.sync="batchMoveDialog"
:close-on-click-modal="false"
width="600px"
>
<div class="dialog_content" style="height: 200px">
<el-form
size="small"
ref="batchMoveForm"
:model="batchMoveForm"
label-position="top"
label-width="80px"
>
<el-form-item
:label="$t('message.laborMange.mobileDivision')"
prop="departmentId"
:rules="[
{
required: true,
message: $t('message.laborMange.pleaseSelectDepartment'),
trigger: 'change',
},
]"
>
<el-select
v-model="batchMoveForm.departmentId"
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="changePeople"
style="width: 100%"
>
<el-option
v-for="item in teamListData.list"
:key="item.id"
:label="item.departmentName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="batchMoveDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t("message.laborMange.cancel") }}</el-button
>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveBatchMove('batchMoveForm')"
size="medium"
>{{ $t("message.laborMange.confirm") }}</el-button
>
</div>
</div>
</el-dialog>
<!-- 查看大图 -->
<div
v-if="bigImageDialog"
class="bigImageDialog"
@click="bigImageDialog = false"
>
<div class="bigImageContent">
<img width="auto" height="auto" :src="bigImageUrl" alt />
</div>
</div>
<!--高拍仪画面 -->
<el-dialog
:modal-append-to-body="false"
:title="$t('message.laborMange.instrumentScreen')"
:close-on-click-modal="false"
:visible.sync="instrUmentScreenDialog"
width="700px"
:show-close="false"
>
<div style="height: 500px; width: 100%">
<div style="height: 400px; width: 100%">
<img
style="width: 100%; height: 400px"
ref="screen"
:src="umentScreenUrl"
alt
/>
</div>
<div class="dialog-footer" style="text-align: center">
<el-button type="primary" @click="onclose(1)" size="small">{{
$t("message.laborMange.photograph")
}}</el-button>
<el-button class="cancleBtn" @click="onclose(2)" size="small">{{
$t("message.laborMange.close")
}}</el-button>
</div>
</div>
</el-dialog>
<!-- 图片裁剪弹框 -->
<el-dialog
:modal-append-to-body="false"
:title="
$t('message.personnelPosition.mapManage.dialog_KJNova_Clipper.title')
"
:visible.sync="cropperDialog"
width="767px"
>
<div class="dialog_content" style="height: 400px">
<!-- <vue-scroll> -->
<vueCropper
ref="cropper"
:img="cropperOption.img"
:outputType="cropperOption.outputType"
:autoCropWidth="cropperOption.autoCropWidth"
:autoCropHeight="cropperOption.autoCropHeight"
:autoCrop="true"
:fixedBox="true"
></vueCropper>
<!-- </vue-scroll> -->
</div>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="cropperDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t("message.personnelPosition.cancel") }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveMapUrlFn"
size="medium"
>{{ $t("message.personnelPosition.determine") }}
</el-button>
</div>
</el-dialog>
<el-dialog
:modal-append-to-body="false"
:title="$t('message.laborMange.photoComparisonResults')"
:visible.sync="showImgList"
width="767px"
>
<div class="img-list">
<div class="form-label">
<span>*</span
>{{
$t("message.personnelPosition.pleaseChoose") +
$t("message.laborMange.picture")
}}:
</div>
<el-radio-group class="radio-box" v-model="radio">
<el-radio
:label="item.personSerial"
v-for="item in imgRadiolist"
:key="item.id"
>
<!-- <img
style="width: 100px; height: 100px"
src="@/assets/images/bigScreen/002.jpg"
/> -->
<el-image
style="width: 100px; height: 100px"
:src="fileUrl + item.imageUrl"
:preview-src-list="[fileUrl + item.imageUrl]"
>
</el-image>
</el-radio>
</el-radio-group>
<div class="btn-box">
<el-button
icon="el-icon-circle-check"
type="primary"
@click="checkImg"
>{{ $t("message.personnelPosition.confirm") }}</el-button
>
<el-button icon="el-icon-circle-close" @click="showImgList = false">{{
$t("message.personnelPosition.cancel")
}}</el-button>
</div>
</div>
</el-dialog>
<!-- 下发详情 -->
<el-dialog
:modal-append-to-body="false"
title="下发详情"
:close-on-click-modal="false"
:visible.sync="issueTeamDialog"
width="740px"
>
<div class="dialog_content">
<div class="table_wrap whiteBlock">
<el-table class="tables" :data="issuePointList">
<el-table-column
type="index"
width="50"
align="center"
:label="$t('message.personnelPosition.beaconManage.table.index')"
></el-table-column>
<el-table-column
prop="detail"
label="任务名称"
align="center"
></el-table-column>
<el-table-column prop="isSuccess" label="执行结果" align="center">
<template v-slot="{ row }">{{
row.isSuccess === 1 ? "成功" : "失败"
}}</template>
</el-table-column>
<el-table-column
:label="
$t('message.personnelPosition.beaconManage.table.operation')
"
align="center"
width="150"
>
<template v-slot="{ row }">
<div
class="operationText"
@click="retryEvent(row.id)"
v-if="row.isSuccess === 0"
>
<span style="color: #5381f6">重试</span>
</div>
</template>
</el-table-column>
<!-- <div slot="empty">{{$t('message.personnelPosition.empty')}}</div> -->
</el-table>
<!-- <el-pagination
class="pagerBox"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="issuePage.pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="issuePage.pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(total)"
background
></el-pagination> -->
<!-- <div class="dialog-footer">
<el-button
class="cancleBtn"
@click="issueTeamDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t("message.laborMange.cancel") }}</el-button
>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="issueTeamDialog = false"
size="medium"
>{{ $t("message.laborMange.confirm") }}</el-button
>
</div> -->
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import axios from "axios";
import {
deleteTeamInfo,
editTeamInfo,
addWorkerInfo,
editWorkerInfo,
updateWorkerExit,
deleteWorkerInfo,
//部门
getDepartmentInfoList,
addDepartmentInfo,
getEnterpriseInfoList,
getWorkerInfoList,
updateWorkerDepartment,
deleteDepartmentInfo,
editDepartmentInfo,
selectJobListApi,
getProjectUfaceConfigInfo,
getIdCardInfoApi,
checkFaceApi,
workerAttendanceRuleList,
getEnterpriseTypeList,
selectHierarchyEnterpriseListApi,
ufaceDevList,
getGroupListApi,
checkImgLibraryApi,
batchSendWorkerInfoApi,
sendWorkerInfoByIdApi,
updateByIdWorkerInfo,
sendBatchWokerApi,
importImgDataApi,
xmglXzHikvisionSyncGetNewestList,
xmglXzHikvisionSyncRetryAPI,
} from "@/assets/js/api/laborPerson";
import { selectUserDevAuthorityByUserIdApi } from "@/assets/js/api/configManage";
import { getProjectConfigListApi } from "@/assets/js/api/project.js";
import {
checkPhone,
CheckSocialCreditCode,
IdentityCodeValid,
} from "@/assets/js/util.js";
import { VueCropper } from "vue-cropper";
import { apiUploadImage } from "@/assets/js/api/common";
import lrz from "lrz";
export default {
components: {
VueCropper,
},
data() {
return {
issuePointList: [],
typeRadio: 1,
refreshPage: true,
key: false,
isCheckeedData: true, //判断一键下发是否有数据选中
COMPANY: COMPANY,
isIndeterminate2: false,
isIndeterminate3: false,
checkAllFaceDev: false,
checkAllGroupDev: false,
ufaceDevAllList: [],
uGroupAllList: [], //所有分组
enterpriseTreeData: [],
projectSn: null, //projectSn 项目sn
uploadUrl: "", //文件上传地址
fileUrl: "", //文件上传地址
bigImageDialog: false, //查看大图
bigImageUrl: "",
addDepartmentDialog: false, // 新增部门 弹窗
teamDialogTitle: this.$t("message.laborMange.newDepartment"),
enterpriseListData: [], // 所属企业下拉
enterpriseForm: {}, //新增企业
checkedId: 0, //选中的企业
//部门信息
departmentForm: {
enterpriseId: "",
departmentName: "", //部门名称
},
//职务类型
dutuiesType: [],
dutuies: [],
workerTypeList: [], // 部门 工种
showEnterpriseName: "", //头部的企业名称
teamListData: {}, // 部门 列表
checkedTeamId: 0, //选中的班组id
pageSize: 10,
page: 1,
total: 0,
// 左侧列表
enterpriseName: "",
//请求表格参数
tableParameter: {
idCard: "",
workerName: "",
personType: 2,
projectSn: "",
departmentId: "",
inserviceType: "",
enterDate: "",
codeState: "",
},
tableListData: [], //表格数据
personDialogTitle: this.$t("message.laborMange.managementEntry"),
titleType: "add",
imgImportDialog: false, //照片导入 弹窗
addPersonDialog: false, //人员录入 弹窗
//人员表单字段
personForm: {
workerName: "",
idCardUpPhotoUrl: "",
idCardDownPhotoUrl: "",
idCard: "",
phoneNumber: "",
personMail: "",
sex: "",
politicsStatus: "",
marry: "",
birthday: "",
nation: "",
educational: "",
nativePlace: "",
issuingAuthorityForIdcard: "",
idCardEndDate: "",
longTerm: false,
inserviceType: "",
emergentPerson: "",
emergentPhone: "",
idCardBigPhotoUrl: "",
fieldAcquisitionUrl: "",
contractImage: "",
enterpriseId: "",
enterDate: "",
jobType: "",
jobName: "",
personType: 2,
ruleId: "",
ufaceDevId: [],
ufaceDevGroupId: [],
personSerial: "",
payRollBankName: "",
payRollBankNumber: "",
locationCardno: "",
},
//人员录入校验
personFormRules: this.$t("message.laborMange.personFormRules"),
//显示的文件列表
idCardUpPhotoUrlFile: [],
idCardDownPhotoUrlFile: [],
idCardBigPhotoUrlFile: [],
fieldAcquisitionUrlFile: [],
contractImageFile: [],
checkAll: false, //显示选中状态
isIndeterminate: false, //有选中的数据
checkedWorker: [], //批量选中的数据
batchMoveDialog: false, //批量移动弹窗
//批量移动表单
batchMoveForm: {
departmentId: "",
},
moveTeamList: [], // 选择移动的班组的列表
showTeamList: false, //显示班组列表
//民族列表
nationList: this.$t("message.laborMange.nationList"),
// 表格 全选状态
checkAllStatus: false,
webSocket: null,
instrUmentScreenDialog: false,
umentScreenUrl: "./img/logo/" + LOGO_white + ".png",
base64Type: "data:image/jpeg;base64,",
isUploadToHouse: false, //是否显示上传到住建局按钮
attendRulesList: [],
enterpriseTypeId: "",
enterpriseTypeList: [],
cropperOption: {
outputType: "png",
img: "",
autoCropWidth: 300, // 默认生成截图框宽度
autoCropHeight: 360, // 默认生成截图框高度
},
cropperDialog: false,
fileTemp: "",
imgRadiolist: [],
isSzProject: "",
issueTeamDialog: false,
issuePage: {
pageNo: 1,
pageSize: 10,
},
whoId: "",
radio: "",
showImgList: false,
imgFileList: [], // 照片文件列表
};
},
created() {
this.projectSn = this.$store.state.projectSn;
this.uploadUrl = this.$store.state.UPLOADURL;
this.fileUrl = this.$store.state.FILEURL;
let data = JSON.parse(sessionStorage.getItem("vuex"));
console.log("vuex信息", data);
data.menuList.forEach((item) => {
if (item.actionList) {
item.actionList.find((item2) => {
if (item2.actionCode == "akey_issued") {
this.key = true;
}
// console.log('this.key', this.key)
});
}
});
if (sessionStorage.getItem("personPage2")) {
this.page = JSON.parse(sessionStorage.getItem("personPage2"));
}
if (sessionStorage.getItem("companyPage2")) {
this.checkedId = JSON.parse(sessionStorage.getItem("companyPage2"));
}
this.getConfig();
this.getProjectList();
this.getAttendRuleList();
this.getHierarchyEnterpriseList();
this.getUfaceDevList();
this.getUGroupDevList();
this.getProjectConfig();
},
mounted() {
this.selectJobList();
this.getEnterpriseType();
},
computed: {
headers() {
return {
Authorization: this.$store.state.userInfo.token,
};
},
},
methods: {
// 导入照片数据
saveImportFn() {
if (this.imgFileList.length == 0) {
this.$message.success("请先导入文件");
return;
}
let data = new FormData(); //new出来的对象
data.append("file", this.imgFileList[0].raw);
data.append("projectSn", this.$store.state.projectSn);
importImgDataApi(data).then((res) => {
if (res.success) {
this.$message.success("操作成功");
this.imgImportDialog = false;
this.getTableData();
}
});
},
handleImportSuccess(response, file, fileList) {
console.log(response, file, fileList);
this.imgFileList = fileList;
console.log(this.imgFileList);
},
handleImportExceed(files, fileList) {
/*this.$message.warning(
`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`
);*/
this.$message.warning(
this.$t("message.docManage.dialog_upload_files.limitingChoice")
); //当前限制选择 1 个文件
},
// 导入照片弹窗
importImgOpen() {
this.imgImportDialog = true;
},
handleUpload(fileData, type) {
const file = fileData.file;
// 压缩图片
lrz(file, { quality: 1 }).then((result) => {
const formData = new FormData();
formData.append("files", result.file);
// 图片上传
apiUploadImage(formData).then((res) => {
if (res.code == 200 || res.status == "SUCCESS") {
const imgInfo = res.data[0];
switch (type) {
case "idCardAvatar": // 身份证头像
this.personForm.idCardBigPhotoUrl = imgInfo.imageUrl;
this.idCardUpPhotoFile = this.idCardBigPhotoUrlFile = [
{ name: imgInfo.filename, url: imgInfo.imageUrl },
];
break;
case "livesFace": // 现场采集人脸
this.cropperOption.img =
this.$store.state.FILEURL + imgInfo.imageUrl;
this.cropperDialog = true;
// let imgStatus = result.file.size / 1024 < 500
// if (!imgStatus) {
// this.cropperOption.img =
// this.$store.state.FILEURL + imgInfo.imageUrl
// this.cropperDialog = true
// } else {
// if (this.isSzProject == 1) {
// this.checkImgLibrary(imgInfo.imageUrl)
// } else {
// this.checkFace(imgInfo.imageUrl)
// }
// }
break;
}
}
});
});
},
changePeople(val) {},
issuePersonFn() {
batchSendWorkerInfoApi({
projectSn: this.$store.state.projectSn,
personType: 2,
}).then((res) => {
this.$message.success(this.$t("message.laborMange.hint4")); //已执行人员下发命令
this.getTableData();
});
},
//单个人员下发
issuePersonOneFn(workerId) {
sendWorkerInfoByIdApi({ workerId: workerId }).then((res) => {
this.$message.success(this.$t("message.laborMange.hint4")); //已执行人员下发命令
});
},
checkImg() {
console.log(this.radio);
this.imgRadiolist.forEach((item) => {
if (this.radio == item.personSerial) {
this.personForm.personSerial = this.radio;
this.personForm.fieldAcquisitionUrl = item.imageUrl;
this.fieldAcquisitionFile = [{ name: "", url: item.imageUrl }];
}
});
this.showImgList = false;
},
// 判断是否为深圳项目
getProjectConfig() {
getProjectConfigListApi({ projectSn: this.projectSn }).then((res) => {
this.isSzProject = res.result[0].isSzProject; //1是 0否
});
},
exportM() {
window.location.href =
this.$http.defaults.baseURL +
"xmgl/download/exporExcelWorkerTemplate?projectSn=" +
this.projectSn;
},
// 下发通行设备
passEquipment() {
sendBatchWokerApi({
projectSn: this.projectSn,
personType: "2",
userId: this.$store.state.userInfo.userId,
enterpriseId: this.checkedId,
}).then((res) => {
if (res.code == 200) {
this.$message({
message: "操作成功,已在后台下发,请稍后查看!",
type: "success",
});
}
});
},
handleChangeE(file, fileList) {
this.fileTemp = file.raw;
if (this.fileTemp) {
if (
this.fileTemp.type ==
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ||
this.fileTemp.type == "application/vnd.ms-excel"
) {
} else {
this.$message.error(this.$t("message.laborMange.hint5")); //附件格式错误,请重新上传
}
}
},
handleSuccessE(file) {
this.refreshPage = false;
if (file.code == 200) {
this.$message.success(file.message); //导入成功
this.refreshBtn();
this.getTableData();
} else {
this.$message.error(file.message);
}
this.$nextTick(() => {
this.refreshPage = true;
});
},
handleErrorE() {
this.$message.error(this.$t("message.laborMange.hint7")); //导入失败
this.refreshBtn();
},
handleUfaceDevChange(val) {
console.log("-------------", val);
let checkedCount = val.length;
let allCheckList = [];
for (let i = 0; i < this.ufaceDevAllList.length; i++) {
if (!this.ufaceDevAllList[i].disabled) {
allCheckList.push(this.ufaceDevAllList[i]);
}
}
this.checkAllFaceDev = checkedCount === allCheckList.length;
this.isIndeterminate2 =
checkedCount > 0 && checkedCount < allCheckList.length;
console.log("--------------------------", this.personForm.ufaceDevId);
},
handleUGroupChange(val) {
let checkedCount = val.length;
let allCheckList = [];
for (let i = 0; i < this.uGroupAllList.length; i++) {
if (!this.uGroupAllList[i].disabled) {
allCheckList.push(this.uGroupAllList[i]);
}
}
this.checkAllGroupDev = checkedCount === allCheckList.length;
this.isIndeterminate3 =
checkedCount > 0 && checkedCount < allCheckList.length;
},
handleCheckAllChangeFace(val) {
if (val) {
this.personForm.ufaceDevId = [];
this.ufaceDevAllList.forEach((item) => {
this.personForm.ufaceDevId.push(item.id);
});
} else {
this.personForm.ufaceDevId = [];
}
console.log(val);
this.isIndeterminate2 = false;
},
handleCheckAllChangeGroup(val) {
if (val) {
this.personForm.ufaceDevGroupId = [];
this.uGroupAllList.forEach((item) => {
this.personForm.ufaceDevGroupId.push(item.id);
});
} else {
this.personForm.ufaceDevGroupId = [];
}
this.isIndeterminate2 = false;
},
// 获取所有分组
getUGroupDevList() {
getGroupListApi({ projectSn: this.projectSn }).then((res) => {
console.log(res);
if (res.code == 200) {
this.uGroupAllList = res.result;
console.log(this.uGroupAllList, 777888999);
this.personForm.ufaceDevGroupId = [
...this.personForm.ufaceDevGroupId,
];
if (this.$store.state.userInfo.accountType == 6) {
this.uGroupAllList.forEach((item) => {
item.disabled = true;
});
// selectUserDevAuthorityByUserIdApi({
// userId: this.$store.state.userInfo.userId,
// devType: "1",
// }).then((res) => {
// if (res.code == 200) {
// let arr = res.result.devId.split(",");
// let id = "";
// this.personForm.ufaceDevId = [];
// for (let i = 0; i < arr.length; i++) {
// console.log(parseInt(arr[i]));
// this.personForm.ufaceDevId.push(parseInt(arr[i]));
// id = parseInt(arr[i]);
// for (let j = 0; j < this.ufaceDevAllList.length; j++) {
// if (this.ufaceDevAllList[j].id == id) {
// this.ufaceDevAllList[j].disabled = false;
// }
// }
// }
// }
// });
}
}
});
},
// 获取所有人脸设备
getUfaceDevList() {
ufaceDevList({ projectSn: this.projectSn }).then((res) => {
console.log(res);
if (res.code == 200) {
this.ufaceDevAllList = res.result;
console.log(this.ufaceDevAllList);
// console.log('shuchu',this.personForm.ufaceDevId)
// console.log('accountType!= 6',this.personForm.ufaceDevId)
this.personForm.ufaceDevId = [...this.personForm.ufaceDevId];
if (this.$store.state.userInfo.accountType == 6) {
this.ufaceDevAllList.forEach((item) => {
item.disabled = true;
});
selectUserDevAuthorityByUserIdApi({
userId: this.$store.state.userInfo.userId,
devType: "1",
}).then((res) => {
if (res.code == 200) {
let arr = res.result.devId.split(",");
let id = "";
this.personForm.ufaceDevId = [];
for (let i = 0; i < arr.length; i++) {
console.log(parseInt(arr[i]));
this.personForm.ufaceDevId.push(parseInt(arr[i]));
id = parseInt(arr[i]);
for (let j = 0; j < this.ufaceDevAllList.length; j++) {
if (this.ufaceDevAllList[j].id == id) {
this.ufaceDevAllList[j].disabled = false;
}
}
}
}
console.log("accountType == 6", this.personForm.ufaceDevId);
});
}
}
});
},
// 获取企业分级列表
getHierarchyEnterpriseList() {
let data = {
projectSn: this.projectSn,
enterpriseName: this.enterpriseName,
userEnterpriseId: this.$store.state.userInfo.userEnterpriseId,
enterpriseTypeId: this.enterpriseTypeId,
};
selectHierarchyEnterpriseListApi(data).then((res) => {
if (res.code == 200) {
console.log(res);
this.enterpriseTreeData = res.result;
this.$nextTick(() => {
if (this.checkedId) {
this.$refs["treeNode"].setCurrentKey(this.checkedId.toString());
} else {
this.$refs["treeNode"].setCurrentKey(res.result[0].id.toString());
}
});
}
});
},
//新增企业 -- 企业类型下拉
getEnterpriseType() {
let data = {};
getEnterpriseTypeList(data).then((res) => {
if (res.code == 200) {
this.enterpriseTypeList = res.result;
}
});
},
//获取考勤规则列表
getAttendRuleList() {
workerAttendanceRuleList({ projectSn: this.$store.state.projectSn }).then(
(result) => {
this.attendRulesList = result.result;
}
);
},
exportFn() {
window.location.href =
this.$http.defaults.baseURL +
"xmgl/download/exporZipWorkerInfo?idCard=" +
this.tableParameter.idCard +
"&projectSn=" +
this.tableParameter.projectSn +
"&departmentId=" +
this.tableParameter.departmentId +
"&workerName=" +
this.tableParameter.workerName +
"&personType=" +
this.tableParameter.personType +
"&enterDate=" +
this.tableParameter.enterDate +
"&codeState=" +
this.tableParameter.codeState +
"&enterpriseId=" +
this.checkedId;
},
getConfig() {
getProjectUfaceConfigInfo({
projectSn: this.$store.state.projectSn,
}).then((result) => {
if (result.success) {
if (result.result) {
this.isUploadToHouse = result.result.housing ? true : false;
}
}
});
},
//查询管理人员的职务类型和职务列表
selectJobList() {
selectJobListApi().then((res) => {
this.dutuies = res.result.jobNameList;
this.dutuiesType = res.result.jobTypeList;
});
},
//获取 部门 列表
getDepartmentList() {
let data = {
enterpriseId: this.checkedId,
projectSn: this.projectSn,
personType: 2,
};
getDepartmentInfoList(data).then((res) => {
console.log("部门列表数据=====", res);
if (res.code == 200) {
this.checkedTeamId = 0;
this.teamListData = res.result;
this.getTableData();
}
});
},
//新增 部门 按钮
addTeamBtn() {
this.teamDialogTitle = this.$t("message.laborMange.newDepartment");
setTimeout(() => {
this.$refs["departmentForm"].clearValidate();
}, 120);
this.addDepartmentDialog = true;
this.departmentForm = {
enterpriseId: "",
departmentName: "", //部门名称
};
},
//新增 部门 确定按钮
saveDepartmentFn(formName) {
this.departmentForm.enterpriseId = this.checkedId;
if (this.departmentForm.departmentName == "") {
this.$message.error(
this.$t("message.laborMange.theNameOfTheDepartment")
);
return;
}
this.$refs[formName].validate((valid) => {
if (valid) {
if (
this.teamDialogTitle == this.$t("message.laborMange.newDepartment")
) {
let data = this.departmentForm;
data.projectSn = this.projectSn;
addDepartmentInfo(data).then((res) => {
if (res.code == 200) {
this.$message.success(res.message);
this.addDepartmentDialog = false;
this.resetForm(formName);
this.getDepartmentList();
}
});
} else {
editDepartmentInfo(this.departmentForm).then((res) => {
if (res.code == 200) {
this.$message.success(res.message);
this.addDepartmentDialog = false;
this.getDepartmentList();
this.resetForm(formName);
}
});
}
} else {
return false;
}
});
},
parseCode(code) {
if (code == 0) {
return ["info", this.$t("message.laborMange.codeless")];
} else if (code == 1) {
return ["danger", this.$t("message.laborMange.redCode")];
} else if (code == 2) {
return ["warning", this.$t("message.laborMange.yellowCode")];
} else if (code == 3) {
return ["success", this.$t("message.laborMange.greenCode")];
}
},
//获取 部门 的表格数据 -- 部门 详情
getTableData() {
let data = this.tableParameter;
data.pageNo = this.page;
data.pageSize = this.pageSize;
data.projectSn = this.projectSn;
data.enterpriseId = this.checkedId;
data.userEnterpriseId = this.$store.state.userInfo.userEnterpriseId;
getWorkerInfoList(data).then((res) => {
if (res.code == 200) {
this.tableListData = res.result.records;
let boole = true;
for (let i in res.result.records) {
if (res.result.records[i].inserviceType == 1) {
boole = false;
}
}
this.checkAllStatus =
this.tableListData.length == 0 ? true : boole ? true : false;
this.total = res.result.total;
}
});
},
//隐藏 部门 列表
hideTeamList() {
if (this.showTeamList) {
this.showTeamList = false;
}
},
//切换 部门
switchoverTeam(id) {
this.checkedTeamId = id;
this.page = 1;
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
if (id === 0) {
this.tableParameter.departmentId = "";
} else {
for (let i in this.teamListData.list) {
if (this.teamListData.list[i].id == id) {
this.tableParameter.departmentId = this.teamListData.list[i].id;
}
}
}
this.getTableData();
},
//编辑 部门 按钮
editTeamInfo(value) {
setTimeout(() => {
this.$refs["departmentForm"].clearValidate();
}, 120);
this.teamDialogTitle = this.$t("message.laborMange.editorialDepartment");
this.addDepartmentDialog = true;
this.departmentForm = JSON.parse(JSON.stringify(value));
},
//删除 部门
deleteTeamInfo(value) {
this.$confirm(
this.$t("message.laborMange.deleteHint"),
this.$t("message.laborMange.hint"),
{
confirmButtonText: this.$t("message.laborMange.confirm"),
cancelButtonText: this.$t("message.laborMange.cancel"),
type: "warning",
}
)
.then(() => {
let data = {
id: value.id,
};
deleteDepartmentInfo(data).then((res) => {
if (res.code == 200) {
this.$message({
type: "success",
message: this.$t("message.laborMange.deleteSuccess"),
});
this.departmentForm.departmentName = ""; //部门名称
this.getDepartmentList();
}
});
})
.catch(error);
},
//新增 人员录入 按钮
personnelEntry() {
this.personDialogTitle = this.$t("message.laborMange.managementEntry");
this.titleType = "add";
this.addPersonDialog = true;
this.personForm = {
workerName: "",
idCardUpPhotoUrl: "",
idCardDownPhotoUrl: "",
idCard: "",
phoneNumber: "",
personMail: "",
sex: "",
politicsStatus: "",
marry: "",
birthday: "",
nation: "",
educational: "",
nativePlace: "",
issuingAuthorityForIdcard: "",
idCardEndDate: "",
longTerm: false,
inserviceType: 1,
emergentPerson: "",
emergentPhone: "",
idCardBigPhotoUrl: "",
fieldAcquisitionUrl: "",
contractImage: "",
enterpriseId: "",
jobType: "",
jobName: "",
personType: 2,
ufaceDevId: [],
ufaceDevGroupId: [],
personSerial: "",
};
if (this.attendRulesList.length > 0) {
this.personForm.ruleId = this.attendRulesList[0].id;
} else {
this.personForm.ruleId = "";
}
this.getUfaceDevList();
this.idCardUpPhotoUrlFile = [];
this.idCardDownPhotoUrlFile = [];
this.idCardBigPhotoUrlFile = [];
this.fieldAcquisitionUrlFile = [];
this.contractImageFile = [];
setTimeout(() => {
this.$refs["personForm"].clearValidate();
this.$refs.personDialog.scrollTop = 0;
}, 120);
// 默认全选设备
this.checkAllFaceDev = true;
this.checkAllGroupDev = false;
this.ufaceDevAllList.map((item) => {
this.personForm.ufaceDevId.push(item.id);
});
},
//获取所属 企业下拉
getProjectList() {
let data = {
projectSn: this.projectSn,
enterpriseName: this.enterpriseName,
userEnterpriseId: this.$store.state.userInfo.userEnterpriseId,
enterpriseTypeId: this.enterpriseTypeId,
};
getEnterpriseInfoList(data).then((res) => {
if (res.code == 200) {
this.enterpriseListData = res.result;
this.checkedId = this.checkedId
? this.checkedId
: res.result.length > 0
? res.result[0].id
: "";
this.showEnterpriseName =
res.result.length > 0 ? res.result[0].enterpriseName : "";
this.checkeEnterprise(res.result[0]);
this.getDepartmentList();
this.getHierarchyEnterpriseList();
} else {
this.$message.error(this.$t("message.laborMange.queryFails"));
}
});
},
// 切换 选择 企业 || 劳务公司
checkeEnterprise(value) {
console.log(value.id, 555);
this.checkedId = value.id;
this.showEnterpriseName = value.enterpriseName;
this.page = 1;
sessionStorage.setItem("personPage2", 1);
sessionStorage.setItem("companyPage2", value.id);
this.$refs.multipleTable.toggleRowSelection([], false);
this.getDepartmentList();
this.checkedTeamId = 0;
this.tableParameter.teamId = "";
this.batchMoveForm = {
teamId: "",
enterpriseId: "",
};
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
// 新增 || 编辑 人员录入 保存按钮
savePersonFn(formName) {
console.log("企业id", this.checkedId);
//身份证校验
if (!IdentityCodeValid(this.personForm.idCard)) {
this.$message.error(this.$t("message.laborMange.correctCellIdCard"));
return;
}
// 电话校验
// if (!checkPhone(this.personForm.phoneNumber)) {
// this.$message.error(
// this.$t('message.laborMange.correctCellPhoneNumber')
// )
// return
// }
// 紧急电话校验
// if (!checkPhone(this.personForm.emergentPhone)) {
// this.$message.error(
// this.$t(
// 'message.laborMange.pleaseEnterTheCorrectEmergencyContactNumber'
// )
// )
// return
// }
// 身份证照片校验
// if (!this.personForm.idCardUpPhotoUrl) {
// this.$message.error(
// this.$t('message.laborMange.pleaseUploadTheNationalEmblemOfIdCard')
// )
// return
// }
// 身份证照片校验
// if (!this.personForm.idCardDownPhotoUrl) {
// this.$message.error(
// this.$t('message.laborMange.pleaseUploadYourIDCardPortrait')
// )
// return
// }
this.personForm.enterpriseId = this.checkedId;
this.$refs[formName].validate((valid) => {
if (valid) {
// 身份证大头和现场人脸采集校验
// if (this.personForm.idCardBigPhotoUrl == '') {
// this.$message.error(
// this.$t('message.laborMange.pleaseUploadYourIDPhoto')
// )
// return
// } else if (this.personForm.fieldAcquisitionUrl == '') {
// this.$message.error(
// this.$t('message.laborMange.pleaseUploadPhotosOfTheScene')
// )
// return
// }
// 现场人脸采集校验
if (this.personForm.fieldAcquisitionUrl == "") {
this.$message.error(
this.$t("message.laborMange.pleaseUploadPhotosOfTheScene")
);
return;
}
if (this.personForm.ruleId == "") {
this.personForm.ruleId = 0;
}
//新增
if (!this.personForm.id) {
let data = { ...this.personForm };
data.projectSn = this.projectSn;
data.devType = this.typeRadio;
data.departmentId = this.checkedTeamId;
data.longTerm = data.longTerm ? 1 : 0;
if (this.personForm.ufaceDevId.length > 0 && data.devType == 1) {
data.ufaceDevId = this.personForm.ufaceDevId.join(",");
data.ufaceDevGroupId = "";
} else {
data.ufaceDevId = "";
}
if (
this.personForm.ufaceDevGroupId.length > 0 &&
data.devType == 2
) {
data.ufaceDevGroupId = this.personForm.ufaceDevGroupId.join(",");
data.ufaceDevId = "";
} else {
data.ufaceDevGroupId = "";
}
addWorkerInfo(data).then((res) => {
if (res.code == 200) {
this.$message.success(this.$t("message.laborMange.addSuccess"));
this.addPersonDialog = false;
this.resetForm(formName);
this.getTableData();
}
});
//编辑
} else {
let data = { ...this.personForm };
data.devType = this.typeRadio;
console.log("dadadaa", data);
if (this.personForm.ufaceDevId.length > 0 && data.devType == 1) {
data.ufaceDevId = this.personForm.ufaceDevId.join(",");
data.ufaceDevGroupId = "";
} else {
data.ufaceDevId = "";
}
if (
this.personForm.ufaceDevGroupId.length > 0 &&
data.devType == 2
) {
data.ufaceDevGroupId = this.personForm.ufaceDevGroupId.join(",");
data.ufaceDevId = "";
} else {
data.ufaceDevGroupId = "";
}
data.longTerm = data.longTerm ? 1 : 0;
delete data.addTime;
editWorkerInfo(data).then((res) => {
if (res.code == 200) {
this.$message.success(
this.$t("message.laborMange.modifySuccess")
);
this.getDepartmentList();
this.addPersonDialog = false;
this.resetForm(formName);
this.examinationFile = []; //体检报告
this.contractFile = []; //合同附件
this.employmentFile = []; //从业资格证书
this.idCardUpPhotoFile = []; //身份证头像
this.fieldAcquisitionFile = []; //现场采集人脸
}
});
}
} else {
this.$message.error(
this.$t("message.laborMange.ThereAreRequiredFieldsLeftUnfilled")
);
return false;
}
});
},
//编辑 人员信息
editWorkerInfo(value, type) {
this.personDialogTitle = this.$t(
"message.laborMange.editManagementInformation"
);
this.titleType = "edit";
this.personForm = {
workerName: "",
idCardUpPhotoUrl: "",
idCardDownPhotoUrl: "",
idCard: "",
phoneNumber: "",
personMail: "",
sex: "",
politicsStatus: "",
marry: "",
birthday: "",
nation: "",
educational: "",
nativePlace: "",
issuingAuthorityForIdcard: "",
idCardEndDate: "",
longTerm: false,
inserviceType: "",
emergentPerson: "",
emergentPhone: "",
idCardBigPhotoUrl: "",
fieldAcquisitionUrl: "",
contractImage: "",
enterpriseId: "",
enterDate: "",
jobType: "",
jobName: "",
personType: 2,
ufaceDevId: [],
ufaceDevGroupId: [],
personSerial: "",
};
this.getUfaceDevList();
// this.goTwo()
this.addPersonDialog = true;
this.personForm = JSON.parse(JSON.stringify(value));
this.personForm.sex = Number(value.sex);
this.personForm.inserviceType = type == 2 ? 1 : value.inserviceType;
this.personForm.longTerm = value.longTerm == 1 ? true : false;
if (value.ufaceDevId) {
this.personForm.ufaceDevId = value.ufaceDevId.split(",");
this.handleUfaceDevChange(this.personForm.ufaceDevId); // 做一下全选按钮的选中与否
} else {
this.personForm.ufaceDevId = [];
this.handleUfaceDevChange(this.personForm.ufaceDevId); // 做一下全选按钮的选中与否
}
if (value.ufaceDevGroupId) {
this.personForm.ufaceDevGroupId = value.ufaceDevGroupId.split(",");
this.handleUGroupChange(this.personForm.ufaceDevGroupId); // 做一下全选按钮的选中与否
} else {
this.personForm.ufaceDevGroupId = [];
this.handleUGroupChange(this.personForm.ufaceDevGroupId); // 做一下全选按钮的选中与否
}
if (this.personForm.ruleId == 0) {
this.personForm.ruleId = "";
}
this.idCardUpPhotoUrlFile = this.personForm.idCardUpPhotoUrl
? [
{
name: this.personForm.idCardUpPhotoUrl,
url: this.personForm.idCardUpPhotoUrl,
},
]
: [];
this.idCardDownPhotoUrlFile = this.personForm.idCardDownPhotoUrl
? [
{
name: this.personForm.idCardDownPhotoUrl,
url: this.personForm.idCardDownPhotoUrl,
},
]
: [];
this.idCardBigPhotoUrlFile = this.personForm.idCardBigPhotoUrl
? [
{
name: this.personForm.idCardBigPhotoUrl,
url: this.personForm.idCardBigPhotoUrl,
},
]
: [];
this.fieldAcquisitionUrlFile = this.personForm.fieldAcquisitionUrl
? [
{
name: this.personForm.fieldAcquisitionUrl,
url: this.personForm.fieldAcquisitionUrl,
},
]
: [];
//合同原件
let arr2 = value.contractImage != "" && value.contractImage.split(",");
let newArr2 = [];
if (arr2.length > 1) {
for (let i in arr2) {
let a = arr2[i].split("*");
newArr2.push({ name: a[0], url: a[1] });
}
} else {
if (value.contractImage != "") {
let a = arr2[0].split("*");
newArr2.push({ name: a[0], url: a[1] });
}
}
this.contractImageFile = value.contractImage != "" ? newArr2 : []; //合同原件
setTimeout(() => {
this.$refs["personForm"].clearValidate();
this.$refs.personDialog.scrollTop = 0;
}, 120);
},
// 有效日期 长期 按钮
checkboxLongTerm(value) {
if (this.personForm.longTerm) {
this.$refs["personForm"].clearValidate("idCardEndDate");
}
this.personForm.idCardEndDate = this.personForm.longTerm
? ""
: this.personForm.idCardEndDate;
},
// 删除 人员信息
removeWorkerInfo(value) {
this.$confirm(
this.$t("message.laborMange.deleteHint"),
this.$t("message.laborMange.hint"),
{
confirmButtonText: this.$t("message.laborMange.confirm"),
cancelButtonText: this.$t("message.laborMange.cancel"),
type: "warning",
}
)
.then(() => {
let data = {
id: value.id,
};
deleteWorkerInfo(data).then((res) => {
if (res.code == 200) {
this.$message({
type: "success",
message: this.$t("message.laborMange.deleteSuccess"),
});
this.page =
this.page > 1 && this.tableListData.length == 1
? this.page - 1
: this.page;
this.getDepartmentList();
}
});
})
.catch(console.log);
},
//删除 身份证头像 或 现场采集照片
shutIconBtn(type) {
if (type == 0) {
this.personForm.idCardBigPhotoUrl = "";
this.idCardBigPhotoUrlFile = [];
} else if (type == 1) {
this.personForm.fieldAcquisitionUrl = "";
this.fieldAcquisitionUrlFile = [];
} else if (type == 2) {
this.personForm.idCardUpPhotoUrl = "";
this.idCardUpPhotoFile = [];
} else if (type == 3) {
this.personForm.idCardDownPhotoUrl = "";
this.idCardDownPhotoUrlFile = [];
}
},
//查看 人员信息 详情
viewDetails(value) {
this.$router.push({
path: "/project/labor/personDetails",
query: {
id: value.id,
},
});
localStorage.setItem("showPersonModule", 2);
},
//列表数据 退场按钮
workerExitBtn(value, type) {
// type == 1 单条数据操作 2 批量操作
let arr = [];
if (type == 2 && this.checkedWorker.length > 0) {
for (let i in this.checkedWorker) {
arr.push(this.checkedWorker[i].id);
}
}
let data = {
workerIdStr: type == 1 ? value.id : arr.join(","),
};
this.$confirm(
this.$t("message.laborMange.bowOutWithHint"),
this.$t("message.laborMange.hint"),
{
confirmButtonText: this.$t("message.laborMange.confirm"),
cancelButtonText: this.$t("message.laborMange.cancel"),
type: "warning",
}
)
.then(() => {
updateWorkerExit(data).then((res) => {
if (res.code == 200) {
this.getDepartmentList();
this.$message({
type: "success",
message: this.$t("message.laborMange.bowOutWitSuccess"),
});
}
});
})
.catch(console.log);
},
//切换每页显示数量
handleSizeChange(val) {
this.pageSize = val;
this.getTableData();
},
//换页
handleCurrentChange(val) {
this.page = val;
sessionStorage.setItem("personPage2", val);
this.getTableData();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
//功能开发中
inDevelopment() {
this.$message.warning(
this.$t("message.laborMange.functionalDevelopment")
);
},
//查询按钮
inquireBtn() {
this.page = 1;
this.getTableData();
},
//刷新按钮
refreshBtn() {
this.page = 1;
this.tableParameter.idCard = "";
this.tableParameter.workerName = "";
this.tableParameter.inserviceType = "";
this.tableParameter.enterDate = "";
this.tableParameter.codeState = "";
this.getTableData();
},
//清空表单
resetForm(formName) {
this.$refs[formName].resetFields();
},
// 文件上传 之前
handleBeforeUpload(file, type) {
if (type == 4) {
if (
file.type != "image/jpeg" &&
file.type != "image/jpg"
// file.type != "image/png"
) {
this.$message.error(this.$t("message.laborMange.hint8")); //"请上传jpg、jpeg格式图片"
return false;
}
}
let fileType = file.type.split("/")[0];
if (fileType == "image") {
return true;
} else {
this.$message.error(this.$t("message.laborMange.pleaseUploadPictures"));
return false;
}
},
//删除上传文件
handleRemove(file, type) {
if (file.status == "ready") {
} else {
this.$message.success(this.$t("message.laborMange.deleteSuccess"));
if (type == 1) {
this.personForm.idCardUpPhotoUrl = "";
} else if (type == 2) {
this.personForm.idCardDownPhotoUrl = "";
} else if (type == 3) {
this.personForm.idCardBigPhotoUrl = "";
} else if (type == 4) {
this.personForm.fieldAcquisitionUrl = "";
} else if (type == 5) {
let newArr = [];
let arrJoin = [];
for (let i = 0; i < this.contractImageFile.length; i++) {
if (file.uid == this.contractImageFile[i].uid) {
this.contractImageFile.splice(i, 1);
newArr = this.contractImageFile;
}
}
if (newArr.length > 0) {
for (let j = 0; j < newArr.length; j++) {
let data =
this.contractImageFile[j].name +
"*" +
this.contractImageFile[j].url;
arrJoin.push(data);
}
} else {
arrJoin = newArr;
}
this.personForm.contractImage = arrJoin.join(",");
}
}
},
//上传成功
handleSuccess(file, type, file2) {
// 人员录入 type == 1 身份证正面照url 国徽; 2 身份证反面照url 人像; 3 身份证头像; 4 现场采集人脸; 5 合同附件;
if (file.code == 200 || file.status == "SUCCESS") {
let arr = { name: file.data[0].filename, url: file.data[0].imageUrl };
if (type == 1) {
this.personForm.idCardUpPhotoUrl = file.data[0].imageUrl;
this.idCardUpPhotoUrlFile = [arr];
this.discernId(file.data[0].imageUrl, 2);
} else if (type == 2) {
this.personForm.idCardDownPhotoUrl = file.data[0].imageUrl;
this.idCardDownPhotoUrlFile = [arr];
this.discernId(file.data[0].imageUrl, 1);
} else if (type == 5) {
this.contractImageFile.push(arr);
let arrJoin = [];
for (let i in this.contractImageFile) {
let data =
this.contractImageFile[i].name +
"*" +
this.contractImageFile[i].url;
arrJoin.push(data);
}
this.personForm.contractImage = arrJoin.join(",");
}
} else {
//清空
this.$message.error(file.message);
if (type == 1) {
this.aptitudeFileList = [];
} else if (type == 2) {
this.logoFileList = [];
} else if (type == 3) {
this.examinationFile = [];
} else if (type == 4) {
this.contractFile = [];
} else if (type == 5) {
this.employmentFile = [];
}
}
},
// 人员照片库比对
checkImgLibrary(url) {
console.log(url);
checkImgLibraryApi({ fileUrl: url, projectSn: this.projectSn }).then(
(res) => {
if (res.result && res.result.length > 0) {
this.imgRadiolist = res.result;
this.radio = res.result[0].personSerial;
this.showImgList = true;
this.cropperDialog = false;
} else {
this.personForm.personSerial = "";
this.personForm.fieldAcquisitionUrl = url;
this.fieldAcquisitionFile = [{ name: "", url: url }];
this.cropperDialog = false;
}
console.log(res, "-----人员库照片查询");
}
);
},
//人脸监测、
checkFace(url) {
checkFaceApi({ fileUrl: url }).then((res) => {
if (res.result.checkType == 1) {
this.personForm.fieldAcquisitionUrl = url;
this.fieldAcquisitionFile = [{ name: "", url: url }];
this.cropperDialog = false;
} else {
this.$message.error(res.result.message);
}
});
},
//保存截图
saveMapUrlFn() {
this.$refs.cropper.startCrop();
var _this = this;
this.$refs.cropper.getCropBlob((data) => {
const isLt2M = data.size / 1024 < 500;
if (!isLt2M) {
this.$message.error(this.$t("message.laborMange.hint9")); //"现场采集照图片大小不能超过 500kb!"
return;
}
var param = new FormData();
param.append("files", data, "image.png");
_this.$http
.post("/upload/image", param, {
headers: {
"Content-Type": "multipart/form-data",
},
})
.then((res) => {
console.log("aaaaa", res);
if (res.data.status == "SUCCESS") {
if (this.isSzProject == 1) {
this.checkImgLibrary(res.data.data[0].imageUrl);
} else {
this.checkFace(res.data.data[0].imageUrl);
}
}
});
});
},
// 超出 上传文件 数量
handleExceed(file, type) {
this.$message.error(
this.$t("message.laborMange.uploadLimitHasBeenReached")
);
},
//查看图片
handlePreview(file, type) {
if (type === 0) {
this.bigImageDialog = true;
this.bigImageUrl = file;
} else {
// 新增企业 type == 1 资质照片; 2 logo;
// 人员录入 type == 3 体检报告; 4 合同附件; 5 从业资格证书; 6 身份证头像; 7 现场采集人脸;
let fileType = null;
if (file.response) {
let url = file.response.data[0];
fileType = url.imageUrl.split(".")[1];
} else {
fileType = file.url.split(".")[1];
}
if (
fileType != "jpg" &&
fileType != "jpeg" &&
fileType != "png" &&
fileType != "bmp" &&
fileType != "gif"
) {
window.open(this.fileUrl + file.url);
//type== 0 直接查看列表中的图片
} else {
this.bigImageDialog = true;
this.bigImageUrl = file.response
? this.fileUrl + file.response.data[0].imageUrl
: this.fileUrl + file.url;
}
}
},
//上传失败
handleError(file, type) {
this.$message.error(this.$t("message.laborMange.pleaseReupload"));
},
//点击全选时
handleCheckAllChange(val) {
let checkedLst = val ? this.tableListData : [];
this.isIndeterminate = false;
for (let i in this.tableListData) {
if (checkedLst.length > 0 && this.tableListData[i].inserviceType == 1) {
this.$refs.multipleTable.toggleRowSelection(
this.tableListData[i],
true
);
} else {
this.$refs.multipleTable.toggleRowSelection(
this.tableListData[i],
false
);
}
}
},
// 获取 多选 选中的 数据
handleCheckedCitiesChange(value) {
if (value.length == 0) {
this.$refs.multipleTable.toggleRowSelection([], false);
this.checkAll = false;
this.isIndeterminate = false;
this.checkedWorker = [];
} else {
this.checkedWorker = value;
let checkedCount = value.length;
this.checkAll = checkedCount === this.tableListData.length;
this.isIndeterminate =
checkedCount > 0 && checkedCount < this.tableListData.length;
}
},
// 离职状态 不能多选
selectEnable(row, rowIndex) {
if (row.inserviceType == 1) {
return true;
} else {
return false;
}
},
//批量移动按钮
batchMove() {
this.batchMoveDialog = true;
this.batchMoveForm = {
departmentId: "",
};
setTimeout(() => {
this.$refs["batchMoveForm"].clearValidate();
}, 120);
},
//批量移动 保存按钮
saveBatchMove(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let data = this.batchMoveForm;
let arr = [];
if (this.checkedWorker.length > 0) {
for (let i in this.checkedWorker) {
arr.push(this.checkedWorker[i].id);
}
}
data.workerIdStr = arr.join(",");
updateWorkerDepartment(data).then((res) => {
if (res.code == 200) {
this.batchMoveDialog = false;
this.$message.success(
this.$t("message.laborMange.mobileSuccess")
);
this.page = 1;
this.getDepartmentList();
this.resetForm(formName);
}
});
} else {
return false;
}
});
},
//新增 人员 输入身份证 自动获取 出身日期 性别
changeIdCard(value) {
if (value.length < 18) {
this.$message.error(
this.$t("message.laborMange.PleaseEnterYourFullIDNumber")
);
return;
} else {
let birth = this.getBirth(value);
let sex = this.getSex(value);
this.personForm.sex = Number(sex);
this.personForm.birthday = birth;
}
},
// 获取 出生日期
getBirth(idCard) {
var birthday = "";
if (idCard != null && idCard != "") {
if (idCard.length == 15) {
birthday = "19" + idCard.slice(6, 12);
} else if (idCard.length == 18) {
birthday = idCard.slice(6, 14);
}
birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
//通过正则表达式来指定输出格式为:1990-01-01
}
return birthday;
},
//获取 性别 男女
getSex(idCard) {
var sexStr = "";
if (parseInt(idCard.slice(-2, -1)) % 2 == 1) {
sexStr = 1;
} else {
sexStr = 2;
}
return sexStr;
},
//下载插件
downloadPlugIn() {
window.open("http://139.159.226.224:9000/itbgp/file/IDCamera1.0.rar");
},
//打开摄像头
turnOnTheCamera(type) {
var ws = new WebSocket("ws://127.0.0.1:1818");
this.webSocket = ws;
ws.onopen = (event) => {
this.onopen(event, type);
};
ws.onmessage = (event) => {
this.onmessage(event, type);
};
ws.onerror = this.onerror;
},
//发送链接设备请求
onopen(event, type) {
if (type == 1) {
// 识别身份证
this.webSocket.send("ReadCard(1001,C:\\Doccamera\\)");
} else if (type == 2) {
//打开人脸 摄像头
this.webSocket.send("OpenFaceFrame(1)");
this.webSocket.send("vSetResolutionEx(2,3)");
this.webSocket.send("bStartPlay2");
} else {
//文件 打开识别摄像头
this.webSocket.send("OpenFaceFrame(0)");
this.webSocket.send("vSetResolutionEx(2,3)");
this.webSocket.send("bStartPlay");
}
},
//接收服务器返回的信息
onmessage(event, type) {
//结束通讯
if (
event.data.indexOf("BeginbStopPlaytrueEndbStopPlay") >= 0 ||
event.data.indexOf("BeginbStopPlayfalseEndbStopPlay") >= 0 ||
event.data.indexOf("BeginbStartPlayfalseEndbStartPlay") >= 0 ||
event.data.indexOf("BeginbStartPlay2falseEndbStartPlay2") >= 0 ||
event.data.indexOf("BeginOpenFaceFrametrueEndOpenFaceFrame") >= 0
) {
this.instrUmentScreenDialog = false;
return;
} else if (
event.data.indexOf("BeginbStopPlaytrueEndbStopPlay") == -1 &&
event.data.indexOf("BeginReadCard") == -1
) {
this.instrUmentScreenDialog = true;
}
if (event.data.indexOf("BeginReadCard") >= 0) {
//获取身份证信息
if (event.data == "BeginReadCardEndReadCard") {
this.$message.error(
this.$t("message.laborMange.failedToObtainIdentityInformation")
);
return;
} else {
// 截取掉 多余的字符
let data = JSON.parse(
event.data.replace("BeginReadCard", "").replace("EndReadCard", "")
);
//身份证 人脸照片
this.uploadFile(data.PhotoB64, 1);
//身份证 国徽面
this.uploadFile(data.BackB64, 2);
//身份证 人像面
this.uploadFile(data.FrontB64, 3);
this.$refs["personForm"].clearValidate();
this.personForm.nativePlace = data.Address;
this.personForm.issuingAuthorityForIdcard = data.Agency;
this.personForm.nation =
data.Folk + this.$t("message.laborMange.clan");
this.personForm.workerName = data.Name;
this.personForm.idCard = data.IdNo;
//截取身份证有效日期
let date = data.Valid.split("-");
this.personForm.idCardEndDate = date[1] == "长期" ? "" : date[1];
this.personForm.longTerm = date[1] == "长期" ? true : false;
this.changeIdCard(data.IdNo);
}
} else if (event.data.indexOf("BeginBase64") >= 0) {
if (type == 2) {
this.$message.success(
this.$t("message.laborMange.takePhotosSuccess")
);
// 上传的是现场采集照片
let url = JSON.parse(JSON.stringify(event.data.substring(11)));
this.uploadFile(url, 4);
} else if (type == 3) {
//合同附件
if (this.contractImageFile >= 3) {
console.log(this.contractImageFile);
this.$message.error(
this.$t("message.laborMange.uploadLimitHasBeenReached")
);
return;
} else {
this.$message.success(
this.$t("message.laborMange.takePhotosSuccess")
);
let url = JSON.parse(JSON.stringify(event.data.substring(11)));
this.uploadFile(url, 5);
}
}
} else {
//显示的图像
this.umentScreenUrl = this.base64Type + event.data;
}
},
onerror() {
this.$message.error(this.$t("message.laborMange.failedToConnectDevice"));
},
//保存 并 关闭
onclose(type) {
if (type == 1) {
this.webSocket.send("sGetBase64");
} else if (type == 2) {
this.webSocket.send("bStopPlay");
}
},
//上传现场采集照片发到服务器
uploadFile(url, type) {
let param = new FormData(); //创建form对象
url = url.replace("EndBase64", "");
param.append("base64Image", this.base64Type + url); //通过append向form对象添加数据
this.$http({
url: "/upload/uploadBase64",
method: "post",
data: param,
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
}).then((res) => {
if ((res.status = "SUCCESS")) {
if (type == 1) {
this.personForm.idCardBigPhotoUrl = res.data.data.imageUrl;
} else if (type == 2) {
this.personForm.idCardUpPhotoUrl = res.data.data.imageUrl;
} else if (type == 3) {
this.personForm.idCardDownPhotoUrl = res.data.data.imageUrl;
} else if (type == 4) {
this.personForm.fieldAcquisitionUrl = res.data.data.imageUrl;
} else if (type == 5) {
let arr =
this.personForm.contractImage != ""
? this.personForm.contractImage.split(",")
: [];
let newUrl =
this.$t("message.laborMange.contract") +
(arr.length + 1) +
"*" +
res.data.data.imageUrl;
let data = {
name: this.$t("message.laborMange.contract") + (arr.length + 1),
url: res.data.data.imageUrl,
};
arr.push(newUrl);
this.personForm.contractImage = arr.join(",");
this.contractImageFile.push(data);
}
} else {
this.$message.error(
this.$t("message.laborMange.PhotoUploadingToServerFailed")
);
}
});
},
uploadToHouseFn(value, id) {
console.log("value", value);
var json = {
isUploadHousing: value ? 1 : 0,
id: id,
};
console.log("data", json);
updateByIdWorkerInfo(json).then(console.log);
},
//身份证识别
discernId(url, type) {
let data = {
imageUrl: this.fileUrl + url,
side: type,
};
getIdCardInfoApi(data).then((res) => {
if (res.code == 200) {
let val = res.result;
if (type == 1) {
this.personForm.nation =
val.ethnicity + this.$t("message.laborMange.clan");
this.personForm.sex = val.sex == "男" ? 1 : 2;
this.personForm.workerName = val.name;
this.personForm.birthday = val.birth;
this.personForm.nativePlace = val.address;
this.personForm.idCard = val.number;
} else {
this.personForm.issuingAuthorityForIdcard = val.issue;
this.personForm.idCardEndDate =
val.valid_to != "长期" ? val.valid_to : "";
this.personForm.longTerm = val.valid_to == "长期" ? true : false;
}
} else {
this.$message.error(this.$t("message.laborMange.hint10")); //身份证信息识别失败
}
});
},
tableRowClassName({ row, rowIndex }) {
if (row.sendSuccessStatus === 1) {
return "green2";
}
if (row.sendSuccessStatus === 2) {
return "red2";
}
if (row.sendSuccessStatus === 3) {
return "yellow2";
}
},
async issueTeamEvent(id) {
this.issueTeamDialog = true;
this.whoId = id;
this.getNewestList();
},
async getNewestList() {
const res = await xmglXzHikvisionSyncGetNewestList({
// pageNo:this.issuePage.pageNo,
// pageSize:this.issuePage.pageSize,
whoId: this.whoId,
});
console.log(res, "---------------------");
this.issuePointList = res.result;
},
async retryEvent(id) {
const res = await xmglXzHikvisionSyncRetryAPI({
id: id,
});
console.log(res);
},
},
};
</script>
<style lang="less" scoped>
@import "./laborPersonCommon.less";
::v-deep .el-button--medium {
padding: 9px 16px;
}
.administration {
width: 100%;
height: 100%;
display: flex;
align-items: center;
.left2 {
width: 370px;
height: 100%;
position: relative;
.placeholder {
width: 339px;
height: 42px;
}
.left_list {
width: 370px;
text-align: center;
height: calc(100% - 61px);
.list_content {
height: calc(100% - 114px);
overflow-y: hidden;
margin-bottom: 60px;
}
.list_content:hover {
overflow-y: auto;
}
.list_content::-webkit-scrollbar {
/*滚动条整体样式*/
width: 5px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
.list_content::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 5px;
background: #c1c1c1;
}
.list_content::-webkit-scrollbar-track {
/*滚动条里面轨道*/
border-radius: 5px;
background: #f1f1f1;
}
}
.el-menu-vertical-demo {
text-align: left;
}
.addFirm {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 45px;
line-height: 45px;
color: rgba(81, 129, 246, 1);
font-size: 15px;
text-align: center;
background: #fff;
border-top: 1px solid #e6e6e6;
font-family: PingFangSC-Regular;
cursor: pointer;
}
.content_data {
padding: 0 20px;
box-sizing: border-box;
height: 43px;
line-height: 43px;
cursor: pointer;
.enterpriseName {
width: 80%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: left;
}
.enterpriseName2 {
text-align: left;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.checkedName {
background-color: rgba(81, 129, 246, 0.1);
border-left: 3px solid #5181f6;
padding-left: 17px;
}
}
.right2 {
margin-left: 11px !important;
}
.fixed_title {
height: 38px;
line-height: 38px;
font-weight: 600;
background: #ededed;
padding-left: 15px;
margin-top: -15px;
margin-bottom: 10px;
margin-left: -15px;
}
}
/deep/ .el-form--label-top .el-form-item__label {
padding: 0;
}
/deep/ .el-form-item--small.el-form-item {
margin-bottom: 10px;
}
.shut_icon {
position: absolute;
right: -11px;
top: -11px;
z-index: 1000;
margin: 5px;
cursor: pointer;
}
.addPerson_content {
height: 617px;
padding-top: 10px;
.type-change {
margin: 5px 0px;
}
}
.custom-tree-node {
display: flex;
justify-content: space-between;
align-items: center;
width: 90%;
padding-right: 10px;
box-sizing: border-box;
}
/deep/ .el-tree-node__content {
height: 36px;
}
/deep/ .el-tree-node.is-current > .el-tree-node__content {
background-color: rgba(168, 191, 230, 0.69) !important;
}
/deep/ .el-tree-node__content:hover {
background: transparent;
}
/deep/ .el-tree-node__expand-icon {
font-size: 20px;
}
.img-list {
.form-label {
margin-bottom: 20px;
span {
color: #f56c6c;
}
}
.radio-box {
padding: 0 30px;
}
/deep/.el-radio {
display: inline-flex;
align-items: center;
margin-right: 30px;
margin-bottom: 20px;
}
.btn-box {
margin-top: 30px;
display: flex;
justify-content: space-around;
}
}
.valuesColor {
color: #fff;
padding: 3px;
}
.yellow {
background-color: #fbe000;
}
.green {
background-color: #72cb40;
}
.red {
background-color: #ec373e;
}
::v-deep {
.el-table .yellow2 {
background-color: #fffce6;
}
.el-table .green2 {
background-color: #f1faec;
}
.el-table .red2 {
background-color: #feebed;
}
.dialog-footer {
margin-top: 20px;
}
.pagerBox {
margin-top: 0;
}
}
// 照片导入
.importImgDialog {
/deep/.el-dialog__body {
padding: 15px 20px;
}
}
.import-content {
.alarm-content {
display: flex;
align-items: center;
margin-left: 104px;
.el-icon-warning-outline {
color: #ea3941;
font-size: 23px;
}
div {
width: 405px;
line-height: 18px;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 12px;
color: #ea3941;
margin: 5px;
}
}
.import-operation {
display: flex;
margin-top: 5px;
margin-left: 136px;
span {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 14px;
color: #272d45;
margin-right: 10px;
}
> div {
.upload-demo {
width: 321px;
height: 45px;
/deep/.el-upload {
width: 100%;
height: 100%;
.el-upload-dragger {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.el-icon-upload {
color: #a2a4af;
font-size: 20px;
margin: 0px;
margin-right: 5px;
}
.el-upload__text {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 14px;
color: #a2a4af;
}
}
}
}
}
}
.upload-tip {
width: 321px;
margin-left: 215px;
margin-top: 5px;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 12px;
line-height: 18px;
color: #a2a4af;
}
.upload-tip-sub {
width: 321px;
margin-left: 215px;
margin-top: 5px;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 14px;
color: #5181f6;
line-height: 16px;
}
}
.tableBtns .operationText{
margin-right: 0px !important;
}
.tablesBtns {
.el-button + .el-button {
margin-left: 0px;
}
}
</style>