3517 lines
120 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
src="@/assets/images/icon-edit.png"
style="margin-right: 16px"
class="icon"
@click="editEnterpriseInfo(item)"
/>
<img
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">
<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
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
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 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
type="primary"
size="medium"
@click="personnelEntry"
:disabled="checkedTeamId == 0"
>{{ $t('message.laborMange.personnelEntry') }}</el-button
>
<el-button type="primary" size="medium" @click="exportM">{{
$t('message.laborMange.export') + $t('message.laborMange.template')
}}</el-button>
<el-upload
style="display: inline-block; margin-left: 15px"
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 size="medium" type="primary">{{
$t('message.laborMange.bulkImport')
}}</el-button>
</el-upload>
<el-button
size="medium"
@click="passEquipment()"
type="primary"
style="margin-left: 15px"
>下发通行设备</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: 100px"
>
<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: 100px"
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: 80px"
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 type="primary" @click="inquireBtn" plain>{{
$t('message.laborMange.inquire')
}}</el-button>
<el-button type="warning" @click="refreshBtn" plain>{{
$t('message.laborMange.refresh')
}}</el-button>
<el-button 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"
>
<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="address" width="280px">
<template slot-scope="scope">
<div class="tableBtns">
<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"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout="total, sizes, prev, pager, next"
:total="total"
background
></el-pagination>
</div>
</div>
</div>
</div>
<!-- 新增 || 编辑 人员录入弹窗 -->
<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'"
maxlength="11"
></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'"
maxlength="11"
></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-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>
{{ $t('message.laborMange.IdCardHead') }}
</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>
{{ $t('message.laborMange.spotFaceCollection') }}
</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>
<el-row :gutter="24">
<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-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>
</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,
checkImgLibraryApi,
batchSendWorkerInfoApi,
sendWorkerInfoByIdApi,
updateByIdWorkerInfo,
sendBatchWokerApi
} 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 {
key: false,
isCheckeedData: true, //判断一键下发是否有数据选中
COMPANY: COMPANY,
isIndeterminate2: false,
checkAllFaceDev: false,
ufaceDevAllList: [],
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',
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: [],
personSerial: '',
payRollBankName: '',
payRollBankNumber: ''
},
//人员录入校验
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: '',
radio: '',
showImgList: false
}
},
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.getProjectConfig()
},
mounted() {
this.selectJobList()
this.getEnterpriseType()
},
computed: {
headers() {
return {
Authorization: this.$store.state.userInfo.token
}
}
},
methods: {
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': // 现场采集人脸
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() {
this.$message.success(this.$t('message.laborMange.hint6')) //导入成功!
this.refreshBtn()
},
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)
},
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
},
// 获取所有人脸设备
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
},
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
}
getDepartmentInfoList(data).then((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.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: [],
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)
},
//获取所属 企业下拉
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.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.ruleId == '') {
this.personForm.ruleId = 0
}
//新增
if (!this.personForm.id) {
let data = JSON.parse(JSON.stringify(this.personForm))
data.projectSn = this.projectSn
data.departmentId = this.checkedTeamId
data.longTerm = data.longTerm ? 1 : 0
if (this.personForm.ufaceDevId.length > 0) {
data.ufaceDevId = this.personForm.ufaceDevId.join(',')
} else {
data.ufaceDevId = ''
}
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
console.log('dadadaa', data)
if (this.personForm.ufaceDevId.length > 0) {
data.ufaceDevId = this.personForm.ufaceDevId.join(',')
} else {
data.ufaceDevId = ''
}
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: [],
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 (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')) //身份证信息识别失败
}
})
}
}
}
</script>
<style lang="less" scoped>
@import './laborPersonCommon.less';
::v-deep .el-button--medium{
padding:9px 10px;
}
.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;
}
.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;
}
}
</style>