zhgdyun/src/views/projectFront/laborManage/attendanceGroup.vue
2025-07-01 16:09:37 +08:00

1784 lines
56 KiB
Vue

<template>
<div class="fullHeight whiteBlock">
<template v-if="setDialog == false">
<div class="searchBox whiteBlock">
<el-form size="medium" :model="pageInfo" ref="queryForm" :inline="true">
<el-form-item label="考勤组名称" prop="groupName">
<el-input v-model="pageInfo.groupName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" plain @click="handleQuery">查询</el-button>
<el-button type="warning" plain @click="handleRefresh">刷新</el-button>
<el-button
v-permission="{
key: 'add',
menuPath: '/project/labor/attendanceGroup',
}"
type="primary"
@click="setControlListDialog(1)"
>新增</el-button
>
<el-button
:disabled="$refs.multipleTable && $refs.multipleTable.selection.length == 0"
:type="
$refs.multipleTable && $refs.multipleTable.selection.length == 0
? 'info'
: 'danger'
"
plain
class="delete_btn"
@click="deleteAttendanceBatch"
v-permission="{
key: 'deleteBatch',
menuPath: '/project/labor/attendanceGroup',
}"
>删除</el-button
>
</el-form-item>
</el-form>
</div>
<div class="table_wrap whiteBlock">
<el-table height="calc(100% - 64px)" max-height="calc(100% - 64px)" ref="multipleTable" class="tables" :data="rulesList">
<el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column align="center" prop="groupName" label="考勤组名称">
<template slot-scope="scope">
<span>{{ scope.row.groupName }}</span>
</template>
</el-table-column>
<el-table-column align="center" prop="workerNum" label="绑定人员数量">
<template v-slot="{ row }">
{{ row.workerNum }}
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<div class="flex2 edit">
<el-button
v-permission="{
key: 'examine',
menuPath: '/project/labor/attendanceGroup',
}"
@click="setControlListDialog(3, scope.row)"
type="text"
icon="el-icon-view"
>查看</el-button
>
<el-button
v-permission="{
key: 'edit',
menuPath: '/project/labor/attendanceGroup',
}"
@click="setControlListDialog(2, scope.row)"
style="border: 0 !important"
type="text"
icon="el-icon-edit"
>编辑</el-button
>
<el-button
v-permission="{
key: 'delete',
menuPath: '/project/labor/attendanceGroup',
}"
style="border: 0 !important; color: #f56c6c"
type="text"
icon="el-icon-delete"
@click="deleteBtn(scope.row)"
>删除</el-button
>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pagerBox"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageInfo.pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="pageInfo.pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(pageInfo.total)"
background
></el-pagination>
</div>
</template>
<div class="container-detail" v-else>
<div class="sidebar_btn">考勤人员列表</div>
<el-form
class="main-header"
size="medium"
:model="attendanceInfo"
ref="attendanceInfo"
:rules="cardFormRules"
:disabled="batchSettingType == 3"
:inline="true"
>
<el-form-item label="考勤组名称" prop="groupName">
<el-input v-model="attendanceInfo.groupName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
type="textarea"
placeholder="请输入"
v-model="attendanceInfo.remark"
maxlength="500"
show-word-limit
></el-input>
</el-form-item>
</el-form>
<div class="sidebar_btn">用户配置</div>
<div class="main-content" v-if="batchSettingType == 1">
<div class="content-left">
<div>
<div>企业名称</div>
<el-input
@input="getRiskListLibraryList"
size="medium"
placeholder="请输入"
suffix-icon="el-icon-search"
v-model="searchInfo.enterpriseName"
></el-input>
<div class="treeBox">
<vue-scroll v-if="treeList.length > 0">
<el-tree
:data="treeList"
@node-click="handleNodeClick"
:props="defaultProps"
default-expand-all
node-key="id"
ref="riskPointTree"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span
style="
width: 160px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
"
:title="node.label"
>{{ node.label }}</span
>
</span>
</el-tree>
</vue-scroll>
<div class="placeholderBox" v-else>
<img src="@/assets/images/noData2.png" alt="" srcset="" />
<p>{{ $t("message.videoManage.empty") }}</p>
</div>
</div>
</div>
<div>
<div>
<div>
待选择人员({{ selectLeftTableData.length }}/{{ staffInfo.total }})
</div>
<div>
<template v-if="treeListDetail.id == ''">
<el-checkbox disabled :value="true">包含下级</el-checkbox>
</template>
<template v-else>
<el-checkbox
@change="getUpdatePersonListFn"
v-model="searchInfo.checked"
>包含下级</el-checkbox
>
</template>
</div>
</div>
<div class="flex">
<el-select
@change="searchTypeChange"
size="medium"
v-model="searchInfo.searchType"
placeholder="请选择"
>
<el-option label="姓名" :value="1"> </el-option>
<el-option label="身份证号" :value="2"> </el-option>
</el-select>
<el-input
@input="getUpdatePersonListFn"
size="medium"
placeholder="请输入"
suffix-icon="el-icon-search"
v-model="searchInfo.searchValue"
></el-input>
</div>
<el-table
:height="370"
ref="staffMultipleTable"
class="tables"
:data="tableDataUp"
@select="handleLeftSelectChange"
@select-all="handleLeftSelectAll"
>
<el-table-column
type="selection"
align="center"
width="55"
></el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="workerName"
label="姓名"
>
<template slot-scope="scope">
<span>{{ scope.row.workerName ? scope.row.workerName : "--" }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="idCard"
label="身份证号"
>
<template v-slot="{ row }">
{{ row.idCard ? row.idCard : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="enterpriseName"
label="企业名称"
>
<template v-slot="{ row }">
{{ row.enterpriseName ? row.enterpriseName : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="departmentTeamName"
label="所属班组/部门"
>
<template v-slot="{ row }">
{{
row.teamName
? row.teamName
: row.departmentName
? row.departmentName
: "--"
}}
</template>
</el-table-column>
<template v-if="tableData.length > 0" #append>
<div
style="text-align: center; padding: 12px 10px 0"
v-if="staffInfo.pageNo * staffInfo.pageSize >= staffInfo.total"
>
没有更多了
</div>
<div
v-else
@click="staffLoad(1)"
style="text-align: center; padding: 12px 10px 0; cursor: pointer"
>
加载更多
</div>
</template>
</el-table>
</div>
</div>
<div class="content-middle">
<div @click="moveRightChange">
<i class="el-icon-arrow-right"></i>
<div>移入右侧选择框</div>
</div>
<div @click="moveLeftChange">
<i class="el-icon-arrow-left"></i>
<div>移入左侧选择框</div>
</div>
</div>
<div class="content-right">
<div>已选人员({{ selectRightTableData.length }}/{{ selectInfo.total }})</div>
<div class="flex">
<el-select
@change="selectSearchTypeChange"
size="medium"
v-model="selectInfo.searchType"
placeholder="请选择"
>
<el-option label="姓名" :value="1"> </el-option>
<el-option label="身份证号" :value="2"> </el-option>
</el-select>
<el-input
@input="selectSearchValueFilter"
size="medium"
placeholder="请输入"
suffix-icon="el-icon-search"
v-model="selectInfo.searchValue"
></el-input>
</div>
<el-table
:height="370"
ref="selectedStaffMultipleTable"
class="tables"
:data="selectListUp"
@select="handleRightSelectChange"
@select-all="handleRightSelectAll"
>
<el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="workerName"
label="姓名"
>
<template slot-scope="scope">
<span>{{ scope.row.workerName ? scope.row.workerName : "--" }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="idCard"
label="身份证号"
>
<template v-slot="{ row }">
{{ row.idCard ? row.idCard : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="enterpriseName"
label="企业名称"
>
<template v-slot="{ row }">
{{ row.enterpriseName ? row.enterpriseName : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="departmentTeamName"
label="所属班组/部门"
>
<template v-slot="{ row }">
{{
row.teamName
? row.teamName
: row.departmentName
? row.departmentName
: "--"
}}
</template>
</el-table-column>
<template v-if="selectList.length > 0" #append>
<div
style="text-align: center; padding: 12px 10px 0"
v-if="selectInfo.pageNo * selectInfo.pageSize >= selectInfo.total"
>
没有更多了
</div>
<div
v-else
@click="staffLoad(2)"
style="text-align: center; padding: 12px 10px 0; cursor: pointer"
>
加载更多
</div>
</template>
</el-table>
</div>
</div>
<div class="main-table" v-if="batchSettingType == 2 || batchSettingType == 3">
<el-form size="medium" :model="selectWorkerInfo" ref="queryForm" :inline="true">
<el-form-item label="人员类型" prop="personType">
<el-select
clearable
v-model="selectWorkerInfo.personType"
placeholder="请选择"
>
<el-option
v-for="item in personTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="所属企业" prop="enterpriseId">
<el-select
filterable
clearable
@change="onEnterpriseChange"
v-model="selectWorkerInfo.enterpriseId"
placeholder="请选择"
>
<el-option
v-for="item in enterpriseList"
:key="item.id"
:label="item.enterpriseName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="所属班组" prop="teamId">
<el-select
filterable
clearable
v-model="selectWorkerInfo.teamId"
placeholder="请选择"
>
<el-option
v-for="item in teamOptions"
:key="item.id"
:label="item.teamName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="所属部门" prop="departmentId">
<el-select
filterable
clearable
v-model="selectWorkerInfo.departmentId"
placeholder="请选择"
>
<el-option
v-for="item in departmentOptions"
:key="item.id"
:label="item.departmentName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名" prop="workerName">
<el-input
v-model="selectWorkerInfo.workerName"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" plain @click="handleQuerySelectWorker"
>查询</el-button
>
<el-button type="warning" plain @click="handleRefreshSelectWorker"
>刷新</el-button
>
<template v-if="batchSettingType == 2">
<el-button
:disabled="
$refs.selectworkerTable && $refs.selectworkerTable.selection.length == 0
"
:type="
$refs.selectworkerTable && $refs.selectworkerTable.selection.length == 0
? 'info'
: 'danger'
"
plain
class="delete_btn"
@click="deleteAttendanceBatchPersonnel"
>删除</el-button
>
<el-button type="primary" @click="setAddPersonnelDialog"
>添加人员</el-button
>
</template>
</el-form-item>
</el-form>
<el-table
ref="selectworkerTable"
height="calc(100% - 64px - 58px)"
max-height="calc(100% - 64px - 58px)"
class="tables selectworkerTable"
:data="selectWorkerList"
>
<el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column prop="workerName" label="姓名">
<template slot-scope="scope">
<span>{{ scope.row.workerName ? scope.row.workerName : "--" }}</span>
</template>
</el-table-column>
<el-table-column prop="personType" label="人员类型">
<template v-slot="{ row }">
{{
row.personType == 1 ? "施工人员" : row.personType == 2 ? "管理人员" : "--"
}}
</template>
</el-table-column>
<el-table-column prop="enterpriseName" label="企业名称">
<template v-slot="{ row }">
{{ row.enterpriseName ? row.enterpriseName : "--" }}
</template>
</el-table-column>
<el-table-column prop="teamName" label="所属班组">
<template v-slot="{ row }">
{{ row.teamName ? row.teamName : "--" }}
</template>
</el-table-column>
<el-table-column prop="departmentName" label="所属部门">
<template v-slot="{ row }">
{{ row.departmentName ? row.departmentName : "--" }}
</template>
</el-table-column>
<el-table-column prop="idCard" label="身份证号">
<template v-slot="{ row }">
{{ row.idCard ? row.idCard : "--" }}
</template>
</el-table-column>
<el-table-column prop="phoneNumber" label="手机号">
<template v-slot="{ row }">
{{ row.phoneNumber ? row.phoneNumber : "--" }}
</template>
</el-table-column>
<el-table-column v-if="batchSettingType == 2" label="操作" align="center">
<template slot-scope="scope">
<div class="flex2 edit">
<el-button
style="border: 0 !important; color: #f56c6c"
type="text"
icon="el-icon-delete"
@click="deleteAttendanceBatchPersonnel(scope.row)"
>删除</el-button
>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pagerBox1"
@size-change="handleSizeChangeWorker"
@current-change="handleCurrentChangeWorker"
:current-page="selectWorkerInfo.pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="selectWorkerInfo.pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(selectWorkerInfo.total)"
background
></el-pagination>
</div>
<div class="main-footer" v-if="batchSettingType != 3">
<el-button
class="cancleBtn"
@click="setDialog = false"
icon="el-icon-circle-close"
size="medium"
>取消
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="submit('attendanceInfo')"
size="medium"
>确定
</el-button>
</div>
<div class="main-footer" v-else>
<el-button
class="cancleBtn"
@click="setDialog = false"
icon="el-icon-circle-close"
size="medium"
>返回
</el-button>
</div>
<el-dialog
:modal-append-to-body="false"
:title="title"
:visible.sync="addPersonnelDialog"
width="1708px"
class="source-danger"
>
<div class="main-content">
<div class="content-left">
<div>
<div>企业名称</div>
<el-input
@input="getRiskListLibraryList"
size="medium"
placeholder="请输入"
suffix-icon="el-icon-search"
v-model="searchInfo.enterpriseName"
></el-input>
<div class="treeBox">
<vue-scroll v-if="treeList.length > 0">
<el-tree
:data="treeList"
@node-click="handleNodeClick"
:props="defaultProps"
default-expand-all
node-key="id"
ref="riskPointTree"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span
style="
width: 160px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
"
:title="node.label"
>{{ node.label }}</span
>
</span>
</el-tree>
</vue-scroll>
<div class="placeholderBox" v-else>
<img src="@/assets/images/noData2.png" alt="" srcset="" />
<p>{{ $t("message.videoManage.empty") }}</p>
</div>
</div>
</div>
<div>
<div>
<div>
待选择人员({{ selectLeftTableData.length }}/{{ staffInfo.total }})
</div>
<div>
<template v-if="treeListDetail.id == ''">
<el-checkbox disabled :value="true">包含下级</el-checkbox>
</template>
<template v-else>
<el-checkbox
@change="getUpdatePersonListFn"
v-model="searchInfo.checked"
>包含下级</el-checkbox
>
</template>
</div>
</div>
<div class="flex">
<el-select
@change="searchTypeChange"
size="medium"
v-model="searchInfo.searchType"
placeholder="请选择"
>
<el-option label="姓名" :value="1"> </el-option>
<el-option label="身份证号" :value="2"> </el-option>
</el-select>
<el-input
@input="getUpdatePersonListFn"
size="medium"
placeholder="请输入"
suffix-icon="el-icon-search"
v-model="searchInfo.searchValue"
></el-input>
</div>
<el-table
:height="370"
ref="staffMultipleTable"
class="tables"
:data="tableDataUp"
@select="handleLeftSelectChange"
@select-all="handleLeftSelectAll"
>
<el-table-column
type="selection"
align="center"
width="55"
></el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="workerName"
label="姓名"
>
<template slot-scope="scope">
<span>{{ scope.row.workerName ? scope.row.workerName : "--" }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="idCard"
label="身份证号"
>
<template v-slot="{ row }">
{{ row.idCard ? row.idCard : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="enterpriseName"
label="企业名称"
>
<template v-slot="{ row }">
{{ row.enterpriseName ? row.enterpriseName : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="departmentTeamName"
label="所属班组/部门"
>
<template v-slot="{ row }">
{{
row.teamName
? row.teamName
: row.departmentName
? row.departmentName
: "--"
}}
</template>
</el-table-column>
<template v-if="tableData.length > 0" #append>
<div
style="text-align: center; padding: 12px 10px 0"
v-if="staffInfo.pageNo * staffInfo.pageSize >= staffInfo.total"
>
没有更多了
</div>
<div
v-else
@click="staffLoad(1)"
style="text-align: center; padding: 12px 10px 0; cursor: pointer"
>
加载更多
</div>
</template>
</el-table>
</div>
</div>
<div class="content-middle">
<div @click="moveRightChange">
<i class="el-icon-arrow-right"></i>
<div>移入右侧选择框</div>
</div>
<div @click="moveLeftChange">
<i class="el-icon-arrow-left"></i>
<div>移入左侧选择框</div>
</div>
</div>
<div class="content-right">
<div>已选人员({{ selectRightTableData.length }}/{{ selectInfo.total }})</div>
<div class="flex">
<el-select
@change="selectSearchTypeChange"
size="medium"
v-model="selectInfo.searchType"
placeholder="请选择"
>
<el-option label="姓名" :value="1"> </el-option>
<el-option label="身份证号" :value="2"> </el-option>
</el-select>
<el-input
@input="selectSearchValueFilter"
size="medium"
placeholder="请输入"
suffix-icon="el-icon-search"
v-model="selectInfo.searchValue"
></el-input>
</div>
<el-table
:height="370"
ref="selectedStaffMultipleTable"
class="tables"
:data="selectListUp"
@select="handleRightSelectChange"
@select-all="handleRightSelectAll"
>
<el-table-column
type="selection"
align="center"
width="55"
></el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="workerName"
label="姓名"
>
<template slot-scope="scope">
<span>{{ scope.row.workerName ? scope.row.workerName : "--" }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="idCard"
label="身份证号"
>
<template v-slot="{ row }">
{{ row.idCard ? row.idCard : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="enterpriseName"
label="企业名称"
>
<template v-slot="{ row }">
{{ row.enterpriseName ? row.enterpriseName : "--" }}
</template>
</el-table-column>
<el-table-column
align="center"
show-overflow-tooltip
prop="departmentTeamName"
label="所属班组/部门"
>
<template v-slot="{ row }">
{{
row.teamName
? row.teamName
: row.departmentName
? row.departmentName
: "--"
}}
</template>
</el-table-column>
<template v-if="selectList.length > 0" #append>
<div
style="text-align: center; padding: 12px 10px 0"
v-if="selectInfo.pageNo * selectInfo.pageSize >= selectInfo.total"
>
没有更多了
</div>
<div
v-else
@click="staffLoad(2)"
style="text-align: center; padding: 12px 10px 0; cursor: pointer"
>
加载更多
</div>
</template>
</el-table>
</div>
</div>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="addPersonnelDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t("message.alarmValueSet.cancel") }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="addPersonnelSubmit"
size="medium"
>{{ $t("message.alarmValueSet.save") }}
</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import {
getWorkerAttendanceGroupV2PageApi,
addWithWorkerListWorkerAttendanceGroupV2Api,
editWorkerAttendanceGroupV2Api,
deleteWorkerAttendanceGroupV2Api,
deleteBatchWorkerAttendanceGroupV2Api,
deleteWorkerListFromAttendanceGroupV2Api,
addWorkerListToAttendanceGroupV2Api,
getEnterpriseInfoList,
getWorkerInfoList,
selectHierarchyEnterpriseListApi,
} from "@/assets/js/api/laborPerson";
import { getRiskListLibraryTreePageApi } from "@/assets/js/api/safeManage";
import { teamList, departmentList } from "@/assets/js/api/laborManagement/payoff";
import dayjs from "dayjs";
export default {
data() {
return {
pageInfo: {
total: 0,
pageNo: 1,
pageSize: 10,
groupName: "",
},
rulesList: [],
personList: [],
enterpriseList: [],
setDialog: false,
batchSettingType: "2",
attendanceInfo: {
groupName: "",
remark: "",
},
searchInfo: {
enterpriseName: "",
searchType: 1,
searchValue: "",
checked: false,
},
treeList: [],
treeListDetail: {},
tableData: [],
staffInfo: {
pageNo: 1,
pageSize: 20,
total: 0,
},
selectLeftTableData: [],
selectList: [],
oldSelectList: [],
selectRightTableData: [],
selectInfo: {
pageNo: 1,
pageSize: 20,
total: 0,
searchType: 1,
searchValue: "",
},
cardFormRules: {
groupName: [
{
required: true,
message: "请输入考勤组名称",
trigger: "blur",
},
],
},
defaultProps: {
children: "children",
label: "enterpriseName",
},
personTypeList: [
{
label: "施工人员",
value: 1,
},
{
label: "管理人员",
value: 2,
},
],
selectWorkerList: [],
selectWorkerInfo: {
pageNo: 1,
pageSize: 10,
total: 0,
personType: "",
enterpriseId: "",
teamId: "",
departmentId: "",
workerName: "",
},
teamOptions: [],
departmentOptions: [],
addPersonnelDialog: false,
selectListAll: [],
title: "",
};
},
mounted() {
this.getDataList();
this.getEnterpriseListFn();
// this.getTeamList();
// this.getDepartmentList();
},
methods: {
setAddPersonnelDialog() {
this.selectList = [];
this.selectRightTableData = [];
this.selectInfo.total = this.selectList.length;
this.getRiskListLibraryList();
this.title = "新增";
// this.$nextTick(() => {
// this.$refs["attendanceInfo"].clearValidate();
// });
this.addPersonnelDialog = true;
},
addPersonnelSubmit() {
let data = {
...this.attendanceInfo,
projectSn: this.$store.state.projectSn,
workerIdList: this.selectList.map((item) => item.id),
};
addWorkerListToAttendanceGroupV2Api(data).then((res) => {
// console.log(res);
if (res.code == 200) {
this.$message.success(this.$t("message.quality.newSuccess"));
this.addPersonnelDialog = false;
this.getDataList();
this.getSelectedPersonListFn();
}
});
},
staffLoad(type) {
console.log("加载更多数据");
if (type == 1) {
this.staffInfo.pageNo += 1;
} else if (type == 2) {
this.selectInfo.pageNo += 1;
}
},
setControlListDialog(type, row) {
this.batchSettingType = type;
this.selectRightTableData = [];
this.selectList = [];
this.selectInfo.total = this.selectList.length;
if (row && row.id) {
this.attendanceInfo = {
...row,
};
} else {
this.attendanceInfo = {
groupName: "",
remark: "",
};
}
if (type == 1) {
this.getRiskListLibraryList();
} else if (type == 2 || type == 3) {
this.getSelectedPersonListFn();
}
this.setDialog = true;
this.$nextTick(() => {
this.$refs["attendanceInfo"].clearValidate();
});
},
//弹窗---保存按钮
submit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let data = {
...this.attendanceInfo,
projectSn: this.$store.state.projectSn,
workerIdList: this.selectList.map((item) => item.id),
};
if (this.batchSettingType == 1) {
// addRiskListMonthlyApi
addWithWorkerListWorkerAttendanceGroupV2Api(data).then((res) => {
// console.log(res);
if (res.code == 200) {
this.$message.success(this.$t("message.quality.newSuccess"));
this.setDialog = false;
this.getDataList();
}
});
} else if (this.batchSettingType == 2) {
// addRiskListMonthlyApi
editWorkerAttendanceGroupV2Api(data).then((res) => {
// console.log(res);
if (res.code == 200) {
this.$message.success("编辑成功");
this.setDialog = false;
this.getDataList();
}
});
}
} else {
return false;
}
});
},
//删除 按钮
deleteBtn(value) {
this.$confirm(
this.$t("message.quality.deleteHint"),
this.$t("message.quality.hint"),
{
confirmButtonText: this.$t("message.quality.confirm"),
cancelButtonText: this.$t("message.quality.cancel"),
type: "warning",
}
)
.then(() => {
let data = {
id: value.id,
};
deleteWorkerAttendanceGroupV2Api(data).then((res) => {
if (res.code == 200) {
this.$message({
type: "success",
message: this.$t("message.quality.successfullyDelete") + "!",
});
this.getDataList();
}
});
})
.catch(() => {});
},
// 获取企业列表
getEnterpriseListFn() {
let that = this;
let reqeustData = {
projectSn: this.$store.state.projectSn,
};
getEnterpriseInfoList(reqeustData).then((res) => {
that.enterpriseList = res.result;
});
},
onEnterpriseChange() {
this.selectWorkerInfo.teamId = "";
this.selectWorkerInfo.departmentId = "";
this.teamOptions = [];
this.departmentOptions = [];
if (this.selectWorkerInfo.enterpriseId) {
this.getTeamList();
this.getDepartmentList();
}
},
/** 查询班组列表 */
getTeamList() {
const params = {
enterpriseId: this.selectWorkerInfo.enterpriseId,
projectSn: this.$store.state.projectSn,
};
teamList(params).then((res) => {
console.log("查询班组列表: ", res);
this.teamOptions = res.result.list;
});
},
/** 查询部门列表 */
getDepartmentList() {
const params = {
enterpriseId: this.selectWorkerInfo.enterpriseId,
projectSn: this.$store.state.projectSn,
};
departmentList(params).then((res) => {
console.log("查询部门列表: ", res);
this.departmentOptions = res.result.list;
});
},
// 获取人员列表
getPersonListFn(enterpriseId) {
let that = this;
let reqeustData = {
projectSn: this.$store.state.projectSn,
enterpriseId: "",
};
getWorkerInfoList(reqeustData).then((res) => {
that.personList = res.result;
});
},
// 删除考勤组人员
deleteAttendanceBatchPersonnel(row) {
if (this.$refs.selectworkerTable.selection.length === 0 && !row.id)
return this.$message.warning("请勾选需要删除的数据!");
this.$confirm("删除后操作不可恢复,请谨慎操作!", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
const ids = this.$refs.selectworkerTable.selection.map((item) => item.id);
deleteWorkerListFromAttendanceGroupV2Api({
id: this.attendanceInfo.id,
workerIdList: row.id ? [row.id] : ids,
}).then((res) => {
this.getDataList();
this.getSelectedPersonListFn();
});
})
.catch(() => {});
},
// 删除考勤组
deleteAttendanceBatch() {
if (this.$refs.multipleTable.selection.length === 0)
return this.$message.warning("请勾选需要删除的数据!");
this.$confirm("删除后操作不可恢复,请谨慎操作!", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
const ids = this.$refs.multipleTable.selection.map((item) => item.id).join(",");
// console.log(this.$refs.multipleTable.selection);
deleteBatchWorkerAttendanceGroupV2Api({ ids }).then((res) => {
this.getDataList();
});
})
.catch(() => {});
},
//查看条数
handleSizeChange(val) {
this.pageInfo.pageSize = val;
this.getDataList();
},
//查看页
handleCurrentChange(val) {
this.pageInfo.pageNo = val;
this.getDataList();
},
getDataList() {
let that = this;
let requestData = {
projectSn: this.$store.state.projectSn,
pageNo: this.pageInfo.pageNo,
pageSize: this.pageInfo.pageSize,
groupName: this.pageInfo.groupName,
};
getWorkerAttendanceGroupV2PageApi(requestData).then((res) => {
this.rulesList = res.result.records;
that.pageInfo.total = res.result.total;
});
},
handleQuery() {
this.pageInfo.pageNo = 1;
this.getDataList();
},
handleRefresh() {
this.pageInfo.pageNo = 1;
this.pageInfo.groupName = "";
this.getDataList();
},
handleNodeClick(data) {
console.log(data);
this.selectedInfo = {};
this.treeListDetail = data;
this.selectLeftTableData = [];
this.getUpdatePersonListFn();
},
selectSearchTypeChange() {
this.selectInfo.searchValue = "";
this.selectSearchValueFilter();
},
selectSearchValueFilter() {
this.selectList = this.oldSelectList.filter((item) => {
if (this.selectInfo.searchType == 1) {
return item.workerName.indexOf(this.selectInfo.searchValue) !== -1;
} else if (this.selectInfo.searchType == 2) {
return item.idCard.indexOf(this.selectInfo.searchValue) !== -1;
}
return true;
});
},
searchTypeChange() {
this.searchInfo.searchValue = "";
this.getUpdatePersonListFn();
},
// 向左移入
moveLeftChange() {
if (this.selectRightTableData.length == 0)
return this.$message.warning("请选择要移入的数据");
this.tableData = [...this.selectRightTableData, ...this.tableData];
this.selectRightTableData.forEach((item) => {
const findIndex = this.selectList.findIndex((ele) => item.id === ele.id);
if (findIndex !== -1) {
this.selectList.splice(findIndex, 1);
}
});
this.clearTableSelection(2);
},
// 右边表单选择 单选
handleRightSelectChange(selection, row) {
console.log(selection, row);
const findIndex = this.selectRightTableData.findIndex((item) => item.id === row.id);
if (findIndex !== -1) {
this.selectRightTableData.splice(findIndex, 1);
} else {
this.selectRightTableData.push(row);
}
},
// 右边表单选择 多选
handleRightSelectAll(selection) {
console.log(selection);
this.selectList.forEach((ele) => {
const findIndex = this.selectRightTableData.findIndex(
(item) => item.id === ele.id
);
if (selection.length > 0) {
if (findIndex == -1) {
this.selectRightTableData.push(ele);
}
} else {
if (findIndex !== -1) {
this.selectRightTableData.splice(findIndex, 1);
}
}
});
},
// 向右移入
moveRightChange() {
if (this.selectLeftTableData.length == 0)
return this.$message.warning("请选择要移入的数据");
this.selectList = [...this.selectLeftTableData, ...this.selectList];
this.selectLeftTableData.forEach((item) => {
const findIndex = this.tableData.findIndex((ele) => item.id === ele.id);
if (findIndex !== -1) {
this.tableData.splice(findIndex, 1);
}
});
this.oldSelectList = [...this.selectList];
console.log(this.selectList, this.selectLeftTableData);
this.clearTableSelection(1);
},
// 左边表单选择 单选
handleLeftSelectChange(selection, row) {
console.log(selection, row);
const findIndex = this.selectLeftTableData.findIndex((item) => item.id === row.id);
if (findIndex !== -1) {
this.selectLeftTableData.splice(findIndex, 1);
} else {
this.selectLeftTableData.push(row);
}
},
// 左边表单选择 多选
handleLeftSelectAll(selection) {
console.log(selection);
this.tableData.forEach((ele) => {
const findIndex = this.selectLeftTableData.findIndex(
(item) => item.id === ele.id
);
if (selection.length > 0) {
if (findIndex == -1) {
this.selectLeftTableData.push(ele);
}
} else {
if (findIndex !== -1) {
this.selectLeftTableData.splice(findIndex, 1);
}
}
});
console.log(this.selectLeftTableData);
},
clearTableSelection(type) {
this.selectInfo.total = this.selectList.length;
this.staffInfo.total = this.tableData.length;
if (type == 1) {
this.selectLeftTableData = [];
this.$refs.staffMultipleTable.clearSelection();
} else if (type == 2) {
this.selectRightTableData = [];
this.$refs.selectedStaffMultipleTable.clearSelection();
}
},
//查看条数
handleSizeChangeWorker(val) {
this.selectWorkerInfo.pageSize = val;
this.getSelectedPersonListFn();
},
//查看页
handleCurrentChangeWorker(val) {
this.selectWorkerInfo.pageNo = val;
this.getSelectedPersonListFn();
},
handleQuerySelectWorker() {
this.selectWorkerInfo.pageNo = 1;
this.getSelectedPersonListFn();
},
handleRefreshSelectWorker() {
this.selectWorkerInfo.pageNo = 1;
this.selectWorkerInfo.personType = "";
this.selectWorkerInfo.enterpriseId = "";
this.selectWorkerInfo.teamId = "";
this.selectWorkerInfo.departmentId = "";
this.selectWorkerInfo.workerName = "";
this.getSelectedPersonListFn();
},
getSelectedPersonListFn() {
let data = {
projectSn: this.$store.state.projectSn,
pageNo: this.selectWorkerInfo.pageNo,
pageSize: this.selectWorkerInfo.pageSize,
personType: this.selectWorkerInfo.personType,
enterpriseId: this.selectWorkerInfo.enterpriseId,
teamId: this.selectWorkerInfo.teamId,
departmentId: this.selectWorkerInfo.departmentId,
workerName: this.selectWorkerInfo.workerName,
attendanceGroupV2Id: this.attendanceInfo.id,
};
getWorkerInfoList(data).then((res) => {
console.log(res);
if (res.code == 200) {
this.selectWorkerList = res.result.records;
this.selectWorkerInfo.total = res.result.total;
}
});
},
// 分页获取人员列表信息
getUpdatePersonListFn() {
let data = {
projectSn: this.$store.state.projectSn,
// enterpriseId: this.treeListDetail.id,
// userId: this.selectedInfo.userId,
// enterpriseId: this.treeListDetail.id,
pageNo: 1,
pageSize: -1,
attendanceGroupV2IdIsNull: 1,
};
if (this.searchInfo.searchType == 1) {
data.workerName = this.searchInfo.searchValue;
} else if (this.searchInfo.searchType == 2) {
data.idCard = this.searchInfo.searchValue;
}
if (this.searchInfo.checked) {
data.containEnterpriseId = this.treeListDetail.id;
} else {
data.enterpriseId = this.treeListDetail.id;
}
this.staffInfo.pageNo = 1;
getWorkerInfoList(data).then((res) => {
console.log(res);
if (res.code == 200) {
this.tableData = res.result.records;
this.staffInfo.total = res.result.records.length;
}
});
},
// 获取企业列表树状
getRiskListLibraryList() {
selectHierarchyEnterpriseListApi({
projectSn: this.$store.state.projectSn,
enterpriseName: this.searchInfo.enterpriseName,
}).then((result) => {
if (result.success) {
if (this.searchInfo.enterpriseName) {
this.treeList = [...result.result];
} else {
this.treeList = [
{
id: "",
enterpriseName: "全部企业",
regionCode: "",
regionName: "",
},
...result.result,
];
}
this.$nextTick(() => {
this.$refs.riskPointTree &&
this.$refs.riskPointTree.setCurrentKey(this.treeList[0].id); // 默认选中节点第一个
this.treeListDetail = this.treeList[0];
this.getUpdatePersonListFn();
});
}
});
},
},
computed: {
tableDataUp() {
if (this.tableData.length > 0) {
const resultList = this.tableData.slice(
0,
this.staffInfo.pageNo * this.staffInfo.pageSize
);
this.$nextTick(() => {
if (this.selectRightTableData.length > 0) {
this.selectRightTableData.forEach((item) => {
const find = this.selectList.find((ele) => ele.id == item.id);
if (find) {
this.$refs.selectedStaffMultipleTable.toggleRowSelection(find, true);
}
});
}
});
return resultList;
}
return [];
},
selectListUp() {
if (this.selectList.length > 0) {
const resultList = this.selectList.slice(
0,
this.selectInfo.pageNo * this.selectInfo.pageSize
);
this.$nextTick(() => {
if (this.selectLeftTableData.length > 0) {
this.selectLeftTableData.forEach((item) => {
const find = this.tableData.find((ele) => ele.id == item.id);
if (find) {
this.$refs.staffMultipleTable.toggleRowSelection(find, true);
}
});
}
});
return resultList;
}
return [];
},
},
};
</script>
<style lang="less" scoped>
.table_wrap {
position: relative;
.pagerBox {
margin-top: 0;
width: 100%;
position: absolute;
bottom: 16px;
}
}
.pagerBox1 {
margin-top: 20px;
display: flex;
justify-content: center;
}
.selectworkerTable {
min-height: initial;
max-height: initial;
}
.container-detail {
padding: 20px;
height: calc(100% - 40px);
overflow-y: auto;
.main-table {
margin-top: 20px;
height: calc(100% - 130px - 48px - 20px - 64px - 22px);
.el-input,
.el-select {
width: 192px;
}
}
.main-header {
display: flex;
flex-direction: column;
margin-top: 22px;
.el-form-item {
margin-bottom: 20px;
.el-input {
width: 192px;
}
.el-textarea {
width: 320px;
}
}
}
.main-content {
display: flex;
height: 487px;
margin-top: 20px;
.content-right {
width: calc(610px - 40px);
padding: 20px;
border: 1px solid #d8dbe8;
> div:first-child {
font-size: 14px;
color: #272d45;
margin-bottom: 15px;
}
.flex {
display: flex;
.el-select {
width: 150px;
}
.el-input {
width: 240px;
}
}
.tables {
margin-top: 10px;
min-height: initial;
max-height: initial;
}
}
.content-left {
display: flex;
> div:first-child {
width: calc(280px - 40px);
padding: 20px;
border: 1px solid #d8dbe8;
> div:first-child {
font-size: 14px;
color: #272d45;
margin-bottom: 15px;
}
.treeBox {
margin-top: 20px;
height: calc(100% - 20px - 18px - 34px);
// background-color: rgba(216, 216, 216, 0.2);
// border: 1px solid #e4e7ed;
// border-radius: 4px;
// padding: 12px 6px;
position: relative;
:deep(.el-checkbox.is-disabled) {
display: none;
}
.treeStyle();
}
}
> div:last-child {
width: calc(610px - 40px);
padding: 20px;
border: 1px solid #d8dbe8;
> div:first-child {
font-size: 14px;
color: #272d45;
margin-bottom: 15px;
display: flex;
justify-content: space-between;
align-items: center;
}
.flex {
display: flex;
.el-select {
width: 150px;
}
.el-input {
width: 240px;
}
}
.tables {
margin-top: 10px;
min-height: initial;
max-height: initial;
}
}
}
.content-middle {
margin: 0 20px;
display: flex;
flex-direction: column;
justify-content: center;
> div {
width: calc(118px - 20px);
height: calc(50px - 15px);
background: #ffffff;
border: 1px solid #d8dbe8;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
font-size: 14px;
color: #a2a4af;
padding: 10px 10px 5px;
cursor: pointer;
}
> div:nth-child(n + 2) {
margin-top: 30px;
}
}
}
.main-footer {
width: 100%;
display: flex;
justify-content: center;
margin-top: 30px;
}
}
.tables {
.el-button {
/deep/ span {
color: #262d49;
}
}
}
/deep/ .el-dialog__body {
padding: 0 20px 20px;
}
.sidebar_btn {
font-family: ABeeZee, ABeeZee;
font-weight: normal;
font-size: 16px;
color: #272d45;
position: relative;
padding-left: 12px;
}
.sidebar_btn::after {
content: "";
position: absolute;
top: 50%;
left: 0px;
transform: translateY(-50%);
width: 3px;
height: 60%;
border-radius: 3px;
background-color: #5c81ee;
}
::v-deep .el-input__inner {
line-height: 1px !important;
}
.flex() {
display: flex;
align-items: center;
}
.search-box {
.flex();
margin-left: 30px;
> div {
.flex();
margin-right: 10px;
> span {
margin-right: 2px;
font-size: 14px;
}
.question-icon {
border: 1px solid #676c7c;
border-radius: 50%;
width: 10px;
height: 10px;
text-align: center;
line-height: 10px;
font-size: 12px;
}
}
/deep/.el-radio-group {
margin-top: 2px;
}
}
.delete_btn {
background-color: transparent;
color: #f56c6c;
border-color: #f56c6c;
}
.treeStyle() {
/deep/.el-tree {
font-size: 15px;
width: 100%;
background-color: transparent;
.el-tree-node {
white-space: normal;
&:focus > .el-tree-node__content {
background-color: transparent;
}
&.is-current > .el-tree-node__content {
background-color: rgba(81, 129, 246, 0.14);
color: #5181f6;
}
}
.custom-tree-node {
height: 16px;
}
.el-tree-node__content {
// height: 32px;
padding: 7px 0;
height: auto;
line-height: 16px;
position: relative;
// margin-bottom: 7px;
&:hover {
background-color: rgba(81, 129, 246, 0.14);
color: #5181f6;
}
.videoName {
font-size: 14px;
}
.projectName {
font-size: 14px;
width: calc(100% - 55px);
display: inline-block;
}
.companyName2 {
font-size: 16px;
font-weight: bold;
display: inline-block;
width: 192px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.el-tree-node__expand-icon {
font-size: 16px;
padding: 0 6px;
&.is-leaf {
color: transparent !important;
}
}
.treeTitle {
background-color: #f7f7f7;
margin-bottom: 10px;
}
}
}
</style>