1030 lines
31 KiB
Vue
1030 lines
31 KiB
Vue
<template>
|
|
<div class="attendanceManage fullHeight" ref="attendanceManage">
|
|
<vue-scroll style="width: 100%; height: 100%">
|
|
<el-form
|
|
:inline="true"
|
|
:model="formInline"
|
|
class="demo-form-inline whiteBlock"
|
|
size="medium"
|
|
>
|
|
<el-form-item :label="$t('message.laborMange.personnelType')">
|
|
<el-select
|
|
style="width:120px"
|
|
v-model="formInline.personType"
|
|
:placeholder="$t('message.laborMange.pleasePersonnelType')"
|
|
>
|
|
<el-option :label="$t('message.laborMange.all')" value></el-option>
|
|
<el-option
|
|
:label="$t('message.laborMange.modules')"
|
|
:value="1"
|
|
></el-option>
|
|
<el-option
|
|
:label="$t('message.laborMange.modules1')"
|
|
:value="2"
|
|
></el-option>
|
|
<el-option
|
|
:label="$t('message.laborMange.modules2')"
|
|
:value="3"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item :label="$t('message.laborMange.companies')">
|
|
<el-select
|
|
filterable
|
|
:clearable="true"
|
|
v-model="formInline.enterpriseId"
|
|
:placeholder="$t('message.laborMange.pleaseChoose')"
|
|
@change="changeCompany"
|
|
>
|
|
<el-option
|
|
:label="item.enterpriseName"
|
|
:value="item.id"
|
|
v-for="item in enterpriseListData"
|
|
:key="item.id"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item :label="$t('message.laborMange.belongsToTeam')">
|
|
<el-select
|
|
filterable
|
|
:clearable="true"
|
|
v-model="formInline.teamId"
|
|
:placeholder="$t('message.laborMange.pleaseChoose')"
|
|
>
|
|
<el-option
|
|
:label="item.teamName"
|
|
:value="item.id"
|
|
v-for="item in teamListData"
|
|
:key="item.id"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item :label="$t('message.laborMange.department')">
|
|
<el-select
|
|
filterable
|
|
:clearable="true"
|
|
v-model="formInline.departmentId"
|
|
:placeholder="$t('message.laborMange.pleaseChoose')"
|
|
>
|
|
<el-option
|
|
:label="item.departmentName"
|
|
:value="item.id"
|
|
v-for="item in departmentListData"
|
|
:key="item.id"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item :label="$t('message.laborMange.workingState')">
|
|
<el-select
|
|
filterable
|
|
v-model="formInline.inserviceType"
|
|
:placeholder="$t('message.laborMange.pleaseChoose')"
|
|
>
|
|
<el-option
|
|
:label="item.name"
|
|
:value="item.id"
|
|
v-for="item in inserviceTypeOptions"
|
|
:key="item.id"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item :label="$t('message.laborMange.month')">
|
|
<el-date-picker
|
|
style="width:120px"
|
|
value-format="yyyy-MM"
|
|
v-model="formInline.monthTime"
|
|
type="month"
|
|
:placeholder="$t('message.laborMange.pleaseSelectMonth')"
|
|
:clearable="false"
|
|
></el-date-picker>
|
|
</el-form-item>
|
|
<el-form-item label="姓名">
|
|
<el-input
|
|
v-model="formInline.workerName"
|
|
:placeholder="$t('message.laborMange.pleaseInputYourName')"
|
|
></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button
|
|
type="primary"
|
|
@click="
|
|
page = 1;
|
|
getListData();
|
|
"
|
|
plain
|
|
>{{ $t("message.laborMange.inquire") }}</el-button
|
|
>
|
|
<el-button type="warning" @click="refresh" plain>{{
|
|
$t("message.laborMange.refresh")
|
|
}}</el-button>
|
|
<el-button
|
|
type="primary"
|
|
@click="
|
|
selectDateType = 1;
|
|
exportDialog = true;
|
|
"
|
|
>{{
|
|
$t("message.laborMange.export") +
|
|
$t("message.laborMange.detailData")
|
|
}}</el-button
|
|
>
|
|
<el-button type="primary" @click="exportMonthlyData"
|
|
v-permission="{key: 'rykq_exportMonthData', menuPath: '/project/labor/attendanceManage'}">{{
|
|
$t("message.laborMange.export") + $t("message.laborMange.monthData")
|
|
}}</el-button>
|
|
<el-button
|
|
type="primary"
|
|
@click="
|
|
selectDateType = 2;
|
|
exportDialog = true;
|
|
"
|
|
v-permission="{key: 'rykq_recountData', menuPath: '/project/labor/attendanceManage'}"
|
|
>{{ $t("message.laborMange.recountData") }}</el-button
|
|
>
|
|
<el-button type="primary" @click="attendancePrint"
|
|
v-permission="{key: 'rykq_attendPrint', menuPath: '/project/labor/attendanceManage'}"
|
|
><a :href="printPdf" class="printPdf">{{
|
|
$t("message.laborMange.attendPrint")
|
|
}}</a></el-button
|
|
>
|
|
<!-- v-permission="{key: 'rykq_pullTrafficData', menuPath: '/project/labor/attendanceManage'}" :无法正常显示 -->
|
|
<el-button v-permission="{key: 'rykq_pullTrafficData', menuPath: '/project/labor/attendanceManage'}" type="primary" @click="openPullDialog"
|
|
>拉取通行数据</el-button
|
|
>
|
|
<!-- <el-button type="primary" @click="importAttendanceData" >导入考勤数据</el-button> -->
|
|
</el-form-item>
|
|
<!-- <div class="doloadExcel">考勤模板下载</div> -->
|
|
</el-form>
|
|
<!-- <div class="placeholder"></div> -->
|
|
<div class="table_content whiteBlock">
|
|
<div style="text-align: right" class="flex">
|
|
<div class="pageTitle">
|
|
{{ $t("message.laborMange.AttendanceStatistics") }}
|
|
</div>
|
|
<div class="flex2 rigth">
|
|
<div>
|
|
<span
|
|
class="span"
|
|
style="background: #3a7bff; margin-right: 5px"
|
|
></span>
|
|
{{ $t("message.laborMange.normalAttendance") }}
|
|
</div>
|
|
<div>
|
|
<span
|
|
class="span"
|
|
style="background: #1d1e37; margin-right: 5px"
|
|
></span>
|
|
{{ $t("message.laborMange.lackOfCard") }}
|
|
</div>
|
|
<div>
|
|
<span
|
|
class="span"
|
|
style="background: #ff6e5f; margin-right: 5px"
|
|
></span>
|
|
{{ $t("message.laborMange.beLate") }}
|
|
</div>
|
|
<div>
|
|
<span
|
|
class="span"
|
|
style="background: #45c5a2; margin-right: 5px"
|
|
></span>
|
|
{{ $t("message.laborMange.leaveEarly") }}
|
|
</div>
|
|
<div>
|
|
<span
|
|
class="span"
|
|
style="background: #ffb85a; margin-right: 5px"
|
|
></span>
|
|
{{ $t("message.laborMange.overtime") }}
|
|
</div>
|
|
<div>
|
|
<span
|
|
class="span"
|
|
style="background: #a3a3a3; margin-right: 5px"
|
|
></span>
|
|
{{ $t("message.laborMange.noAttendance") }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<el-table :data="tableData" max-height="500" width="100%" border>
|
|
<el-table-column
|
|
prop="workerName"
|
|
:label="$t('message.laborMange.compellation')"
|
|
align="center"
|
|
></el-table-column>
|
|
<!-- <el-table-column
|
|
prop="temperature"
|
|
:label="'温度(℃)'"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{scope.row.temperature?scope.row.temperature:'--'}}
|
|
</template>
|
|
</el-table-column> -->
|
|
<el-table-column
|
|
:prop="'day' + item"
|
|
:label="String(item)"
|
|
v-for="(item, index) in showTime"
|
|
:key="index"
|
|
align="center"
|
|
width="44"
|
|
>
|
|
<template slot-scope="scope">
|
|
<span
|
|
class="span"
|
|
v-show="scope.row['day' + item] == 0"
|
|
style="cursor: pointer; background: #a3a3a3"
|
|
></span>
|
|
<span
|
|
class="span"
|
|
v-show="scope.row['day' + item] == 1"
|
|
style="cursor: pointer; background: #3a7bff"
|
|
@click="selectWorker(scope.row, item, scope.$index)"
|
|
:class="
|
|
number == item && selectIndex == scope.$index ? 'span2' : ''
|
|
"
|
|
></span>
|
|
<span
|
|
class="span"
|
|
v-show="scope.row['day' + item] == 2"
|
|
style="cursor: pointer; background: #ff6e5f"
|
|
@click="selectWorker(scope.row, item, scope.$index)"
|
|
:class="
|
|
number == item && selectIndex == scope.$index ? 'span2' : ''
|
|
"
|
|
></span>
|
|
<span
|
|
class="span"
|
|
v-show="scope.row['day' + item] == 3"
|
|
style="cursor: pointer; background: #45c5a2"
|
|
@click="selectWorker(scope.row, item, scope.$index)"
|
|
:class="
|
|
number == item && selectIndex == scope.$index ? 'span2' : ''
|
|
"
|
|
></span>
|
|
<span
|
|
class="span"
|
|
v-show="scope.row['day' + item] == 4"
|
|
style="cursor: pointer; background: #ffb85a"
|
|
@click="selectWorker(scope.row, item, scope.$index)"
|
|
:class="
|
|
number == item && selectIndex == scope.$index ? 'span2' : ''
|
|
"
|
|
></span>
|
|
<span
|
|
class="span"
|
|
v-show="scope.row['day' + item] == 5"
|
|
style="cursor: pointer; background: #1d1e37"
|
|
@click="selectWorker(scope.row, item, scope.$index)"
|
|
:class="
|
|
number == item && selectIndex == scope.$index ? 'span2' : ''
|
|
"
|
|
></span>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-pagination
|
|
class="pagerBox"
|
|
style="margin: 10px 20px 0; text-align: right"
|
|
@size-change="handleSizeChange"
|
|
@current-change="handleCurrentChange"
|
|
:current-page="page"
|
|
:page-size="pageSize"
|
|
layout="total, sizes, prev, pager, next"
|
|
:total="Number(total)"
|
|
background
|
|
></el-pagination>
|
|
<div>
|
|
<div style="text-align: right; margin: 15px 0" class="flex">
|
|
<div class="pageTitle">
|
|
{{ $t("message.laborMange.attendanceDetail") }}
|
|
</div>
|
|
</div>
|
|
<el-table :data="dateilList" style="width: 100%">
|
|
<el-table-column
|
|
prop="workerName"
|
|
:label="$t('message.laborMange.compellation')"
|
|
align="center"
|
|
></el-table-column>
|
|
<el-table-column
|
|
prop="temperature"
|
|
:label="$t('message.laborMange.temperature') + '(℃)'"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ scope.row.temperature ? scope.row.temperature : "--" }}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column
|
|
:label="$t('message.laborMange.healthCodeStatus')"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ healthCodelist[scope.row.healthCode] }}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column
|
|
prop="nucleicAcidTime"
|
|
:label="$t('message.laborMange.nucleicAcidTime')"
|
|
align="center"
|
|
></el-table-column>
|
|
|
|
<el-table-column
|
|
:label="$t('message.laborMange.nucleicAcidResults')"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ nucleicAcidResultsList[scope.row.nucleicAcidResult] }}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column
|
|
prop="vaccinateTime"
|
|
:label="$t('message.laborMange.vaccinationTime')"
|
|
align="center"
|
|
></el-table-column>
|
|
|
|
<el-table-column
|
|
:label="$t('message.laborMange.vaccinationFrequency')"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{
|
|
vaccinationFrequencyltsList[scope.row.vaccinateState] || "无"
|
|
}}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column
|
|
prop="passType"
|
|
:label="
|
|
$t('message.laborMange.enterInto') +
|
|
'/' +
|
|
$t('message.laborMange.leave')
|
|
"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
<div v-if="scope.row.passType == 1">
|
|
{{ $t("message.laborMange.enterInto") }}
|
|
</div>
|
|
<div v-if="scope.row.passType == 2">
|
|
{{ $t("message.laborMange.leave") }}
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column
|
|
prop="createTime"
|
|
:label="$t('message.laborMange.inOutTime')"
|
|
align="center"
|
|
></el-table-column>
|
|
<el-table-column
|
|
prop="passagewayName"
|
|
:label="$t('message.laborMange.inletOutletPosition')"
|
|
align="center"
|
|
></el-table-column>
|
|
<el-table-column
|
|
prop="address"
|
|
:label="$t('message.laborMange.inAndOutOfTheWay')"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
<div v-if="scope.row.cardType == 1">
|
|
{{ $t("message.laborMange.ic") }}
|
|
</div>
|
|
<div v-if="scope.row.cardType == 2">
|
|
{{ $t("message.laborMange.faceRecognition") }}
|
|
</div>
|
|
<div v-if="scope.row.cardType == 3">
|
|
{{ $t("message.laborMange.fingerprintIdentification") }}
|
|
</div>
|
|
<div v-if="scope.row.cardType == 4">
|
|
{{ $t("message.laborMange.reissueACard") }}
|
|
</div>
|
|
<div v-if="scope.row.cardType == 5">
|
|
{{ $t("message.laborMange.QRcode") }}
|
|
</div>
|
|
<div v-if="scope.row.cardType == 6">
|
|
{{ $t("message.laborMange.bluetooth") }}
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column
|
|
prop="address"
|
|
:label="$t('message.laborMange.entranceGuardPhotos')"
|
|
align="center"
|
|
>
|
|
<template slot-scope="scope">
|
|
<img
|
|
:src="fileUrl + scope.row.imageUrl"
|
|
style="width: 40px; height: 60px; cursor: pointer"
|
|
@click="
|
|
bigImageUrl = fileUrl + scope.row.imageUrl;
|
|
bigImageDialog = true;
|
|
"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
</vue-scroll>
|
|
<!-- 拉取通行数据弹框 -->
|
|
<el-dialog
|
|
:modal-append-to-body="false"
|
|
:close-on-click-modal="false"
|
|
:visible.sync="imgImportDialog"
|
|
width="800px"
|
|
>
|
|
<div class="title-set" slot="title">
|
|
<div class="line"></div>
|
|
<span>同步人员通行数据</span>
|
|
<div class="question-icon" @mouseover="tipShow = true" @mouseout="tipShow = false">?</div>
|
|
<div class="tip-text" v-if="tipShow">此处可同步海康ISC平台的通行数据</div>
|
|
</div>
|
|
<div class="dialog-content">
|
|
<div class="form-content">
|
|
<el-form
|
|
label-width="230px"
|
|
size="medium"
|
|
style="width: 80%;margin: 0 auto;"
|
|
>
|
|
<el-form-item
|
|
prop="afternoonStartTime"
|
|
label="选择需要手动拉取数据的时间段:"
|
|
>
|
|
<el-date-picker
|
|
v-model="timeRange"
|
|
type="datetimerange"
|
|
:range-separator="$t('message.laborMange.to')"
|
|
:start-placeholder="$t('message.laborMange.startDate')"
|
|
:end-placeholder="$t('message.laborMange.dateClosed')"
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
>
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
<div class="dialog-footer">
|
|
<el-button
|
|
class="cancleBtn"
|
|
@click="imgImportDialog = false"
|
|
icon="el-icon-circle-close"
|
|
size="medium"
|
|
>{{ $t("message.laborMange.cancel") }}</el-button
|
|
>
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-circle-check"
|
|
@click="confirmPullData"
|
|
size="medium"
|
|
>确认拉取</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="
|
|
selectDateType == 1
|
|
? $t('message.laborMange.hint1')
|
|
: $t('message.laborMange.hint2')
|
|
"
|
|
:visible.sync="exportDialog"
|
|
width="667px"
|
|
>
|
|
<div class="dialog_content">
|
|
<el-form label-width="90px" size="medium" class="dialogFormBox">
|
|
<el-form-item
|
|
prop="afternoonStartTime"
|
|
:label="$t('message.laborMange.timeFrame')"
|
|
>
|
|
<el-date-picker
|
|
v-model="exportDateArr"
|
|
type="daterange"
|
|
:range-separator="$t('message.laborMange.to')"
|
|
:start-placeholder="$t('message.laborMange.startDate')"
|
|
:end-placeholder="$t('message.laborMange.dateClosed')"
|
|
value-format="yyyy-MM-dd"
|
|
>
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
<div class="dialog-footer">
|
|
<el-button
|
|
class="cancleBtn"
|
|
@click="exportDialog = false"
|
|
icon="el-icon-circle-close"
|
|
size="medium"
|
|
>{{ $t("message.personnelPosition.cancel") }}
|
|
</el-button>
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-circle-check"
|
|
@click="exportFn"
|
|
size="medium"
|
|
v-permission="{key: 'rykq_exportDetailData', menuPath: '/project/labor/attendanceManage'}"
|
|
>{{ $t("message.personnelPosition.determine") }}
|
|
</el-button>
|
|
</div>
|
|
</el-form>
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import scroll from "vue-seamless-scroll";
|
|
import {
|
|
getPageListData,
|
|
getSelectDateilApi,
|
|
getAfreshMonthAttendanceStatisticsApi,
|
|
attendFsdApi,
|
|
} from "@/assets/js/api/attendanceManage";
|
|
import {
|
|
getDepartmentInfoList,
|
|
getTeamInfoList,
|
|
getEnterpriseInfoList,
|
|
pullMemberDataApi
|
|
} from "@/assets/js/api/laborPerson";
|
|
export default {
|
|
name: "attendanceManage",
|
|
components: {
|
|
scroll,
|
|
},
|
|
data() {
|
|
return {
|
|
tipShow: false,
|
|
timeRange: [],
|
|
printPdf: "",
|
|
nucleicAcidResultsList: {
|
|
0: "未知",
|
|
1: "阴性",
|
|
2: "阳性",
|
|
},
|
|
healthCodelist: {
|
|
0: "无",
|
|
1: "红码",
|
|
2: "黄码",
|
|
3: "绿码",
|
|
},
|
|
vaccinationFrequencyltsList: {
|
|
0: "未接种",
|
|
1: "接种一针",
|
|
2: "接种两针",
|
|
3: "接种三针",
|
|
},
|
|
exportDialog: false,
|
|
exportDateArr: [],
|
|
inserviceTypeOptions: [
|
|
{
|
|
name: this.$t("message.laborMange.onJob"),
|
|
id: 1,
|
|
},
|
|
{
|
|
name: this.$t("message.laborMange.dimission"),
|
|
id: 2,
|
|
},
|
|
],
|
|
fileUrl: "",
|
|
page: 1,
|
|
pageSize: 10,
|
|
total: 0,
|
|
formInline: {
|
|
workerName: "",
|
|
personType: "",
|
|
monthTime: "",
|
|
enterpriseId: "",
|
|
teamId: "",
|
|
departmentId: "",
|
|
inserviceType: 1,
|
|
},
|
|
projectSn: "",
|
|
tableData: [],
|
|
number: 0,
|
|
selectIndex: 0,
|
|
showSelectPersonSn: "",
|
|
showSelectTime: "",
|
|
dateilList: [],
|
|
showTime: 31,
|
|
bigImageDialog: false,
|
|
enterpriseListData: [],
|
|
teamListData: [],
|
|
departmentListData: [],
|
|
selectDateType: 1, //1是选择导出时间段 2是选择重新计算考勤的时间段
|
|
imgImportDialog: false,
|
|
};
|
|
},
|
|
created() {
|
|
let date = new Date();
|
|
let year = date.getFullYear();
|
|
let month = date.getMonth() + 1;
|
|
month = month < 10 ? "0" + month : month;
|
|
let mydate = year.toString() + "-" + month.toString();
|
|
this.formInline.monthTime = mydate;
|
|
this.projectSn = this.$store.state.projectSn;
|
|
this.getListData();
|
|
this.fileUrl = this.$store.state.FILEURL;
|
|
this.getCompanyList();
|
|
this.getTeamList();
|
|
},
|
|
|
|
methods: {
|
|
// 确认拉取数据
|
|
confirmPullData(){
|
|
if(!this.timeRange || this.timeRange.length == 0){
|
|
this.$message.error("请先选择时间段");
|
|
return;
|
|
}
|
|
let reqeustData = {
|
|
projectSn: this.projectSn,
|
|
startTime: this.timeRange[0],
|
|
endTime: this.timeRange[1]
|
|
}
|
|
pullMemberDataApi(reqeustData).then((res) => {
|
|
if (res.code == 200) {
|
|
this.$message({
|
|
message: res.message,
|
|
type: "success",
|
|
});
|
|
this.imgImportDialog = false;
|
|
}
|
|
});
|
|
},
|
|
/// 打开拉取通行数据弹窗
|
|
openPullDialog() {
|
|
this.timeRange = [];
|
|
this.imgImportDialog = true;
|
|
},
|
|
//考勤打印
|
|
attendancePrint() {
|
|
console.log("参数", this.formInline);
|
|
this.printPdf =
|
|
this.$http.defaults.baseURL +
|
|
"xmgl/workerWagesPayment/attendancePdf?monthTime=" +
|
|
this.formInline.monthTime +
|
|
"&personType=" +
|
|
this.formInline.personType +
|
|
"&projectSn=" +
|
|
this.$store.state.projectSn +
|
|
"&enterpriseId=" +
|
|
this.formInline.enterpriseId +
|
|
"&teamId=" +
|
|
this.formInline.teamId;
|
|
// console.log('路径', this.printPdf )
|
|
},
|
|
// 导入考勤数据
|
|
importAttendanceData() {},
|
|
//获取所属 企业下拉
|
|
getCompanyList() {
|
|
let data = {
|
|
projectSn: this.projectSn,
|
|
enterpriseName: "",
|
|
userEnterpriseId: this.$store.state.userInfo.userEnterpriseId,
|
|
};
|
|
getEnterpriseInfoList(data).then((res) => {
|
|
this.enterpriseListData = res.result;
|
|
});
|
|
},
|
|
//获取 部门 列表
|
|
getDepartmentList() {
|
|
let data = {
|
|
enterpriseId: this.formInline.enterpriseId,
|
|
projectSn: this.projectSn,
|
|
};
|
|
getDepartmentInfoList(data).then((res) => {
|
|
this.departmentListData = res.result.list;
|
|
});
|
|
},
|
|
//获取企业的 - 班组列表
|
|
getTeamList() {
|
|
let data = {
|
|
enterpriseId: this.formInline.enterpriseId,
|
|
projectSn: this.projectSn,
|
|
};
|
|
getTeamInfoList(data).then((res) => {
|
|
this.teamListData = res.result.list;
|
|
});
|
|
},
|
|
changeCompany() {
|
|
this.formInline.departmentId = "";
|
|
this.formInline.teamId = "";
|
|
this.getDepartmentList();
|
|
this.getTeamList();
|
|
},
|
|
//导出详细数据
|
|
exportFn() {
|
|
console.log(this.exportDateArr);
|
|
if (!this.exportDateArr || this.exportDateArr.length == 0) {
|
|
this.$message.error(
|
|
this.$t("message.laborMange.pleaseChoose") +
|
|
this.$t("message.laborMange.timeFrame")
|
|
);
|
|
return false;
|
|
}
|
|
if (this.selectDateType == 1) {
|
|
window.location.href =
|
|
this.$http.defaults.baseURL +
|
|
"xmgl/download/exportExcelWorkerAttendance?projectSn=" +
|
|
this.projectSn +
|
|
"&endTime=" +
|
|
this.exportDateArr[1] +
|
|
"&startTime=" +
|
|
this.exportDateArr[0] +
|
|
"&personType=" +
|
|
this.formInline.personType +
|
|
"&workerName=" +
|
|
this.formInline.workerName +
|
|
"&userEnterpriseId=" +
|
|
this.$store.state.userInfo.userEnterpriseId +
|
|
"&enterpriseId=" +
|
|
this.formInline.enterpriseId +
|
|
"&teamId=" +
|
|
this.formInline.teamId +
|
|
"&departmentId=" +
|
|
this.formInline.departmentId +
|
|
"&inserviceType=" +
|
|
this.formInline.inserviceType;
|
|
} else {
|
|
let data = {
|
|
userId: this.$store.state.userInfo.userId,
|
|
projectSn: this.projectSn,
|
|
startTime: this.exportDateArr[0],
|
|
endTime: this.exportDateArr[1],
|
|
};
|
|
getAfreshMonthAttendanceStatisticsApi(data).then((res) => {
|
|
this.$message.success(this.$t("message.laborMange.hint3"));
|
|
});
|
|
}
|
|
this.exportDialog = false;
|
|
},
|
|
//导出月份数据
|
|
exportMonthlyData() {
|
|
window.location.href =
|
|
this.$http.defaults.baseURL +
|
|
"xmgl/download/exportExcelMonthWorkerAttendanceStatistics?projectSn=" +
|
|
this.projectSn +
|
|
"&monthTime=" +
|
|
this.formInline.monthTime +
|
|
"&personType=" +
|
|
this.formInline.personType +
|
|
"&workerName=" +
|
|
this.formInline.workerName +
|
|
"&userEnterpriseId=" +
|
|
this.$store.state.userInfo.userEnterpriseId +
|
|
"&enterpriseId=" +
|
|
this.formInline.enterpriseId +
|
|
"&teamId=" +
|
|
this.formInline.teamId +
|
|
"&departmentId=" +
|
|
this.formInline.departmentId +
|
|
"&inserviceType=" +
|
|
this.formInline.inserviceType;
|
|
},
|
|
|
|
//查询 列表信息
|
|
getListData() {
|
|
let data = this.formInline;
|
|
data.pageNo = this.page;
|
|
data.pageSize = this.pageSize;
|
|
data.projectSn = this.projectSn;
|
|
data.userEnterpriseId = this.$store.state.userInfo.userEnterpriseId;
|
|
getPageListData(data).then((res) => {
|
|
if (res.code == 200) {
|
|
this.total = res.result.total;
|
|
this.tableData = res.result.records;
|
|
let date = 0;
|
|
for (let i in res.result.records[0]) {
|
|
if (i.indexOf("day") >= 0) {
|
|
date++;
|
|
}
|
|
}
|
|
this.showTime = date > 0 ? date : this.showTime;
|
|
this.number = 0;
|
|
this.dateilList = [];
|
|
}
|
|
});
|
|
},
|
|
//选中的状态
|
|
selectWorker(value, num, index) {
|
|
this.number = num;
|
|
this.selectIndex = index;
|
|
this.showSelectPersonSn = value.personSn;
|
|
this.showSelectTime =
|
|
num < 10 ? value.queryTime + "-0" + num : value.queryTime + "-" + num;
|
|
this.getSelectDateil();
|
|
},
|
|
// 获取 个人考勤信息
|
|
getSelectDateil() {
|
|
let data = {
|
|
personSn: this.showSelectPersonSn,
|
|
queryTime: this.showSelectTime,
|
|
};
|
|
getSelectDateilApi(data).then((res) => {
|
|
if (res.code == 200) {
|
|
this.dateilList = res.result;
|
|
}
|
|
});
|
|
},
|
|
|
|
refresh() {
|
|
this.formInline.workerName = "";
|
|
this.formInline.personType = "";
|
|
this.formInline.enterpriseId = "";
|
|
this.formInline.teamId = "";
|
|
this.formInline.departmentId = "";
|
|
let date = new Date();
|
|
let year = date.getFullYear();
|
|
let month = date.getMonth() + 1;
|
|
month = month < 10 ? "0" + month : month;
|
|
let mydate = year.toString() + "-" + month.toString();
|
|
this.formInline.monthTime = mydate;
|
|
this.page = 1;
|
|
this.pageSize = 10;
|
|
|
|
this.getListData();
|
|
},
|
|
|
|
handleSizeChange(value) {
|
|
this.pageSize = value;
|
|
this.getListData();
|
|
},
|
|
handleCurrentChange(value) {
|
|
this.page = value;
|
|
this.getListData();
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="less" scoped>
|
|
.printPdf {
|
|
text-decoration: none;
|
|
color: white;
|
|
}
|
|
.flex {
|
|
display: flex;
|
|
align-content: center;
|
|
justify-content: space-between;
|
|
}
|
|
.flex2 {
|
|
display: flex;
|
|
align-content: center;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.attendanceManage {
|
|
width: 100%;
|
|
height: 100%;
|
|
box-sizing: border-box;
|
|
|
|
.demo-form-inline {
|
|
width: 100%;
|
|
// background: #fff;
|
|
min-height: 84px;
|
|
padding: 24px 20px 0;
|
|
box-sizing: border-box;
|
|
border-radius: 3px;
|
|
margin-bottom: 7px;
|
|
}
|
|
|
|
.table_content {
|
|
width: 100%;
|
|
// background: #fff;
|
|
padding: 15px 0;
|
|
border-radius: 3px;
|
|
min-height: 100%;
|
|
// .left {
|
|
// color: rgba(38, 45, 71, 100);
|
|
// font-size: 15px;
|
|
// font-family: PingFangSC-Medium;
|
|
// text-align: center;
|
|
// font-weight: 600;
|
|
// padding: 0px 15px;
|
|
// margin-left: 20px;
|
|
// height: 20px;
|
|
// line-height: 20px;
|
|
// border-left: 3px solid #4a8bff;
|
|
// }
|
|
.pageTitle {
|
|
margin-left: 20px;
|
|
font-size: 15px;
|
|
}
|
|
.rigth {
|
|
div {
|
|
margin-right: 15px;
|
|
line-height: 30px;
|
|
font-size: 14px;
|
|
}
|
|
}
|
|
.span {
|
|
display: inline-block;
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 50%;
|
|
// margin-right: 3px;
|
|
}
|
|
.span2 {
|
|
display: inline-block;
|
|
width: 18px;
|
|
height: 18px;
|
|
border-radius: 50%;
|
|
// margin-right: 5px;
|
|
margin-bottom: -5px;
|
|
}
|
|
}
|
|
// .placeholder {
|
|
// width: 100%;
|
|
// height: 7px;
|
|
// background: #f3f5fd;
|
|
// }
|
|
/deep/ .__view {
|
|
width: 100% !important;
|
|
min-width: 0 !important;
|
|
}
|
|
/deep/ .el-table__body-wrapper::-webkit-scrollbar {
|
|
width: 5px; // 横向滚动条
|
|
height: 8px; // 纵向滚动条 必写
|
|
}
|
|
// 滚动条的滑块
|
|
/deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb {
|
|
background-color: #cacaca;
|
|
border-radius: 3px;
|
|
}
|
|
.bigImageDialog {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: rgba(0, 0, 0, 0.5);
|
|
text-align: center;
|
|
z-index: 1000000;
|
|
overflow-y: auto;
|
|
// padding-bottom: 50px;
|
|
height: 100%;
|
|
.bigImageContent {
|
|
height: 100%;
|
|
margin: 0 auto;
|
|
text-align: center;
|
|
}
|
|
img {
|
|
// margin-top: 10%;
|
|
position: relative;
|
|
top: 10%;
|
|
max-height: 80%;
|
|
max-width: 80%;
|
|
}
|
|
}
|
|
}
|
|
.doloadExcel {
|
|
// display: inline-block;
|
|
margin-right: 20px;
|
|
color: #5181f6;
|
|
cursor: pointer;
|
|
float: right;
|
|
text-decoration: underline;
|
|
line-height: 34px;
|
|
}
|
|
// 通行数据拉取弹窗样式
|
|
.title-set {
|
|
display: flex;
|
|
align-items: center;
|
|
.line {
|
|
width: 0px;
|
|
height: 15px;
|
|
border-radius: 3px;
|
|
border: 2px solid #5c81ee;
|
|
margin-right: 10px;
|
|
}
|
|
>span{
|
|
margin-right: 5px;
|
|
}
|
|
.question-icon{
|
|
border: 1px solid #676C7C;
|
|
border-radius: 50%;
|
|
width: 10px;
|
|
height: 10px;
|
|
text-align: center;
|
|
line-height: 10px;
|
|
font-size: 12px;
|
|
}
|
|
.tip-text{
|
|
font-size: 14px;
|
|
margin-left: 5px;
|
|
}
|
|
}
|
|
</style>
|