Merge branch 'shenzhen-dev' of http://10.0.0.60/dhp/zhgdyun into shenzhen-dev

This commit is contained in:
骆乐 2022-07-28 11:22:29 +08:00
commit 551def98d5
11 changed files with 3276 additions and 4745 deletions

4999
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,7 @@
"version": "0.1.0",
"private": true,
"scripts": {
"start": "npm run dev",
"dev": "vue-cli-service serve",
"build": "vue-cli-service build"
},

View File

@ -29,13 +29,13 @@ export function payrollRecordDetailById(data) {
}
// 导出人员工资pdf
export function exportSalaryPdf(projectSn) {
window.location.href = axios.defaults.baseURL +`xmgl/workerWagesPayment/salaryPdf?projectSn=${projectSn}`;
export function exportSalaryPdf(params) {
window.location.href = axios.defaults.baseURL +`xmgl/workerWagesPayment/salaryPdf?projectSn=${params.projectSn}&teamId=${params.teamId||''}&departmentId=${params.departmentId||''}`;
}
// 导出工资列表excel
export function exportSalaryExcel(projectSn) {
window.location.href = axios.defaults.baseURL +`xmgl/workerWagesPayment/excelProjectWages?projectSn=${projectSn}`;
export function exportSalaryExcel(params) {
window.location.href = axios.defaults.baseURL +`xmgl/workerWagesPayment/excelProjectWages?projectSn=${params.projectSn}&teamId=${params.teamId||''}&departmentId=${params.departmentId||''}`;
}
// 导入工资列表excel

View File

@ -293,6 +293,12 @@ const routes2 = [
name: '劳务管理_人员考勤',
component: () => import('@/views/projectFront/laborManage/attendanceManage/attendanceManage.vue'),
},
//劳务管理--人员考勤--珠海路由
{
path: '/project/labor/zh/attendanceManage',
name: '劳务管理_人员考勤',
component: () => import('@/views/projectFront/laborManage/attendanceManage/zhAttendanceManage.vue'),
},
//劳务管理--工种管理
{
path: '/project/labor/workTypeManage',

View File

@ -1,11 +1,16 @@
<template>
<div class="payoff">
<el-row type="flex" style="width: 100%;height: 100%">
<el-row type="flex" style="width: 100%; height: 100%">
<el-col class="left-col" :span="5">
<vue-scroll>
<div class="scroll">
<div class="list-wrapper">
<div v-for="(item, index) in projectList" :key="item.id" :class="['list-item', { 'is-active': activeIndex == index }]" @click="handleItemClick(index)">
<div
v-for="(item, index) in projectList"
:key="item.id"
:class="['list-item', { 'is-active': activeIndex == index }]"
@click="handleItemClick(index)"
>
<span class="title">{{ item.enterpriseName }}</span>
</div>
</div>
@ -13,37 +18,92 @@
</vue-scroll>
</el-col>
<el-col class="right-col" :span="19">
<el-row style="width: 100%;height: 100%">
<el-col class="top-col" :span="4" :class="styleType == 3 ? 'changeStyle' : ''">
<el-form size="medium" :model="queryParams" ref="queryForm" :inline="true" label-width="120px">
<el-row style="width: 100%; height: 100%">
<el-col
class="top-col"
:span="4"
:class="styleType == 3 ? 'changeStyle' : ''"
>
<el-form
size="medium"
:model="queryParams"
ref="queryForm"
:inline="true"
label-width="120px"
>
<el-form-item label="工资发放状态" prop="payStatus">
<el-select v-model="queryParams.payStatus" placeholder="请选择工资发放状态" clearable
:style="{width: '100%'}"
<el-select
v-model="queryParams.payStatus"
placeholder="请选择工资发放状态"
clearable
:style="{ width: '100%' }"
>
<el-option v-for="(item, index) in wageStatusOptions" :key="index" :label="item.label" :value="item.value"></el-option>
<el-option
v-for="(item, index) in wageStatusOptions"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="班组" prop="teamId">
<el-select v-model="queryParams.teamId" placeholder="请选择班组" clearable :style="{width: '100%'}">
<el-option v-for="(item, index) in teamOptions" :key="item.id" :label="item.teamName" :value="item.id"></el-option>
<el-select
v-model="queryParams.teamId"
placeholder="请选择班组"
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) 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 v-model="queryParams.departmentId" placeholder="请选择部门" clearable :style="{width: '100%'}">
<el-option v-for="(item, index) in departmentOptions" :key="item.id" :label="item.departmentName" :value="item.id"></el-option>
<el-select
v-model="queryParams.departmentId"
placeholder="请选择部门"
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) 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="queryParams.workerName" placeholder="请输入姓名" clearable :style="{width: '100%'}">
<el-input
v-model="queryParams.workerName"
placeholder="请输入姓名"
clearable
:style="{ width: '100%' }"
>
</el-input>
</el-form-item>
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="queryParams.idCard" placeholder="请输入身份证号" clearable :style="{width: '100%'}">
<el-input
v-model="queryParams.idCard"
placeholder="请输入身份证号"
clearable
:style="{ width: '100%' }"
>
</el-input>
</el-form-item>
<el-form-item label="月份" prop="payMonth">
<el-date-picker type="month" v-model="queryParams.payMonth" format="yyyy-MM" value-format="yyyy-MM"
:style="{width: '100%'}" placeholder="请选择月份" clearable></el-date-picker>
<el-date-picker
type="month"
v-model="queryParams.payMonth"
format="yyyy-MM"
value-format="yyyy-MM"
:style="{ width: '100%' }"
placeholder="请选择月份"
clearable
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">查询</el-button>
@ -53,7 +113,10 @@
style="display: inline-block; margin-left: 15px"
class="upload-demo"
name="excelFile"
:action="$http.defaults.baseURL + 'xmgl/workerWagesPayment/uploadWagesPaymentExcel'"
:action="
$http.defaults.baseURL +
'xmgl/workerWagesPayment/uploadWagesPaymentExcel'
"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:show-file-list="false"
@ -68,21 +131,59 @@
</el-form-item>
</el-form>
</el-col>
<el-col class="bottom-col" :span="20" :class="styleType == 3 ? 'bottomTwo' : ''">
<el-col
class="bottom-col"
:span="20"
:class="styleType == 3 ? 'bottomTwo' : ''"
>
<vue-scroll>
<div class="scroll" :class="styleType == 3 ? 'boxBottom' : ''">
<el-table v-loading="loading" :data="userList">
<el-table-column label="月份" align="center" prop="payMonth" />
<el-table-column label="姓名" align="center" prop="workerName" />
<el-table-column label="身份证号" align="center" prop="idCard" />
<el-table-column label="班组名称/部门名称" align="center" prop="teamId">
<el-table-column
label="月份"
align="center"
prop="payMonth"
/>
<el-table-column
label="姓名"
align="center"
prop="workerName"
/>
<el-table-column
label="身份证号"
align="center"
prop="idCard"
/>
<el-table-column
label="班组名称/部门名称"
align="center"
prop="teamId"
>
<template #default="{ row }">
<span>{{ row.personType == 1 ? row.teamName : row.personType == 2 ? row.departmentName : '' }}</span>
<span>{{
row.personType == 1
? row.teamName
: row.personType == 2
? row.departmentName
: ''
}}</span>
</template>
</el-table-column>
<el-table-column label="应发工资" align="center" prop="payGross" />
<el-table-column label="实发工资" align="center" prop="payNet" />
<el-table-column label="工资发放状态" align="center" prop="payStatus">
<el-table-column
label="应发工资"
align="center"
prop="payGross"
/>
<el-table-column
label="实发工资"
align="center"
prop="payNet"
/>
<el-table-column
label="工资发放状态"
align="center"
prop="payStatus"
>
<template #default="{ row }">
<span v-if="row.payStatus == '1'">已发放</span>
<span v-else>未发放</span>
@ -90,7 +191,13 @@
</el-table-column>
<el-table-column label="操作" align="center">
<template #default="{ row }">
<el-button style="border: 0 !important" type="text" icon="el-icon-edit" @click="handleUpdate(row)">编辑</el-button>
<el-button
style="border: 0 !important"
type="text"
icon="el-icon-edit"
@click="handleUpdate(row)"
>编辑</el-button
>
</template>
</el-table-column>
</el-table>
@ -112,48 +219,98 @@
</el-row>
<!-- 编辑弹窗 -->
<el-dialog :visible.sync="open" width="600px" append-to-body title="编辑">
<el-form ref="editForm" :model="editForm" :rules="editFormRules" size="medium" label-width="120px">
<el-form-item label="姓名" prop="workerName">
<el-input v-model="editForm.workerName" placeholder="请输入姓名" :disabled='true' clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="editForm.idCard" placeholder="请输入身份证号" :disabled='true' clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
<el-form-item label="月份" prop="payMonth">
<el-date-picker type="month" v-model="editForm.payMonth" format="yyyy-MM" value-format="yyyy-MM"
:style="{width: '100%'}" placeholder="请选择月份" clearable :disabled='true'></el-date-picker>
</el-form-item>
<el-form-item label="班组名称" prop="teamId">
<el-input v-model="editForm.teamId" placeholder="" :disabled='true' clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
<el-form-item label="部门名称" prop="departmentId">
<el-select :disabled='true' v-model="editForm.departmentId" placeholder="" clearable :style="{width: '100%'}">
<el-option v-for="(item, index) in departmentOptions" :key="item.id" :label="item.departmentName" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="应发工资" prop="payGross">
<el-input v-model="editForm.payGross" placeholder="请输入应发工资" clearable :style="{width: '100%'}">
</el-input>
</el-form-item>
<el-form-item label="实发工资" prop="payNet">
<el-input v-model="editForm.payNet" placeholder="请输入实发工资" clearable :style="{width: '100%'}">
</el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="open" width="600px" append-to-body title="编辑">
<el-form
ref="editForm"
:model="editForm"
:rules="editFormRules"
size="medium"
label-width="120px"
>
<el-form-item label="姓名" prop="workerName">
<el-input
v-model="editForm.workerName"
placeholder="请输入姓名"
:disabled="true"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
<el-form-item label="身份证号" prop="idCard">
<el-input
v-model="editForm.idCard"
placeholder="请输入身份证号"
:disabled="true"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
<el-form-item label="月份" prop="payMonth">
<el-date-picker
type="month"
v-model="editForm.payMonth"
format="yyyy-MM"
value-format="yyyy-MM"
:style="{ width: '100%' }"
placeholder="请选择月份"
clearable
:disabled="true"
></el-date-picker>
</el-form-item>
<el-form-item label="班组名称" prop="teamId">
<el-input
v-model="editForm.teamId"
placeholder=""
:disabled="true"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
<el-form-item label="部门名称" prop="departmentId">
<el-select
:disabled="true"
v-model="editForm.departmentId"
placeholder=""
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in departmentOptions"
:key="item.id"
:label="item.departmentName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="应发工资" prop="payGross">
<el-input
v-model="editForm.payGross"
placeholder="请输入应发工资"
clearable
:style="{ width: '100%' }"
>
</el-input>
</el-form-item>
<el-form-item label="实发工资" prop="payNet">
<el-input
v-model="editForm.payNet"
placeholder="请输入实发工资"
clearable
:style="{ width: '100%' }"
>
</el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
import {
enterpriseList,
teamList,
departmentList,
@ -171,7 +328,7 @@ import { wageStatusOptions } from './data'
export default {
data: () => ({
// 3 2 1
styleType:'',
styleType: '',
// SN
projectSn: '',
//
@ -317,7 +474,7 @@ export default {
/** 项目列表 点击操作 */
handleItemClick(index) {
if (this.activeIndex == index) return;
this.activeIndex = index;
this.queryParams.pageNo = 1;
this.queryParams.payMonth = nowDate()
@ -346,11 +503,23 @@ export default {
},
/** 导出 */
handleExport() {
exportSalaryPdf(this.projectSn)
let params = {
projectSn: this.projectSn,
teamId: this.queryParams.teamId,
departmentId: this.queryParams.departmentId,
payStatus:this.queryParams.payStatus
}
exportSalaryPdf(params)
},
/** 导出Excel */
handleExportExcel() {
exportSalaryExcel(this.projectSn)
let params = {
projectSn: this.projectSn,
teamId: this.queryParams.teamId,
departmentId: this.queryParams.departmentId,
payStatus:this.queryParams.payStatus
}
exportSalaryExcel(params)
},
handleUploadSuccess(res) {
if (res.code == 200) {
@ -375,7 +544,7 @@ export default {
this.open = false;
},
/** 提交按钮 */
submitForm: function() {
submitForm: function () {
this.$refs['editForm'].validate(valid => {
if (!valid) return
const params = {
@ -422,13 +591,13 @@ export default {
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items : center;
justify-content: space-between;
align-items: center;
width: 100%;
height: 45px;
padding: 10px 20px;
cursor: pointer;
transition: all .3s ease-in;
transition: all 0.3s ease-in;
background-color: #fff;
border-left: 3px solid transparent;
border-bottom: 2px solid #f3f5fd;
@ -436,7 +605,7 @@ export default {
.list-item.is-active {
width: 100%;
box-sizing: border-box;
border-left-color: #0E74D6;
border-left-color: #0e74d6;
background-color: #f3f6fd;
}
}
@ -444,9 +613,9 @@ export default {
.right-col {
width: 100%;
height: 100%;
.top-col, .bottom-col {
.top-col,
.bottom-col {
background: #fff;
}
.top-col {
padding: 30px 25px;
@ -462,13 +631,13 @@ export default {
}
/* 查询表单 按钮样式 */
.right-col ::v-deep .el-button {
border-color: #4E7CFF;
border-color: #4e7cff;
}
.scroll {
overflow-y: auto;
}
.boxBottom{
margin-top:30px;
.boxBottom {
margin-top: 30px;
}
</style>

View File

@ -524,6 +524,7 @@ export default {
this.getListData();
this.fileUrl = this.$store.state.FILEURL;
this.getCompanyList()
this.getTeamList()
},
methods: {

View File

@ -0,0 +1,826 @@
<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")+"考勤明细"}}</el-button>
<el-button type="primary" @click="exportMonthlyData" >{{$t("message.laborMange.export")+$t("message.laborMange.monthData")}}</el-button>
<el-button type="primary" @click="selectDateType=2;exportDialog=true" >{{$t("message.laborMange.recountData")}}</el-button>
<el-button type="primary" @click="attendancePrint"><a :href="printPdf" class="printPdf">{{$t("message.laborMange.attendPrint")}}</a></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 v-if="COMPANY">
<span
class="span"
style="background: #1d1e37; margin-right: 5px"
></span>
{{ $t("message.laborMange.lackOfCard") }}
</div>
<div v-if="COMPANY">
<span
class="span"
style="background: #ff6e5f; margin-right: 5px"
></span>
{{ $t("message.laborMange.beLate") }}
</div>
<div v-if="COMPANY">
<span
class="span"
style="background: #45c5a2; margin-right: 5px"
></span>
{{ $t("message.laborMange.leaveEarly") }}
</div>
<div v-if="COMPANY">
<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] !=0"
style="cursor: pointer; background: #3a7bff"
@click="selectWorker(scope.row, item, scope.$index)"
:class="
number == item && selectIndex == scope.$index ? 'span2' : ''
"
></span>
<!-- <template v-if="COMPANY">
<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> -->
</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="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>
<!-- 查看大图 -->
<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"
>{{$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
} from "@/assets/js/api/laborPerson";
export default {
name: "attendanceManage",
components: {
scroll,
},
data() {
return {
COMPANY:COMPANY,
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
};
},
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: {
//
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) => {
console.log(res.result.list,"res.result.list")
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;
}
</style>

View File

@ -35,6 +35,7 @@
>
</div>
<div class="content_title flex3">
<div class="flex">
<div class="flex">
<div class="img_wrap" style="margin-right: 8px">
@ -81,6 +82,7 @@
</el-upload>
</div>
</div>
<div class="info_wrap" v-if="basicInfoStatus">
<div>
<el-input
@ -115,6 +117,7 @@
></el-input>
</div>
</div>
<div class="info_wrap" v-else>
<div class="name">{{ workerInfo.workerName }}</div>
<div class="time">
@ -252,6 +255,7 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
@ -291,6 +295,39 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="开户行"
prop="payRollBankName"
>
<el-input
v-if="detailInfoStatus"
style="width: 80%"
v-model="workerInfo.payRollBankName"
placeholder="请输入开户行"
></el-input>
<span v-else>{{workerInfo.payRollBankName}}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="银行卡号"
prop="payRollBankNumber"
>
<el-input
v-if="detailInfoStatus"
style="width: 80%"
v-model="workerInfo.payRollBankNumber"
placeholder="请输入银行卡号"
></el-input>
<span v-else>{{ workerInfo.payRollBankNumber }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
@ -333,6 +370,7 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item

View File

@ -7,28 +7,43 @@
active-text-color="#5181F6"
class="el-menu-demo whiteBlock"
mode="horizontal"
style="width:370px"
style="width: 370px"
>
<el-menu-item index="1" style="height:41px;line-height:41px" @click="switchTab(1)">{{$t('message.laborMange.modules')}}</el-menu-item>
<el-menu-item index="2" style="height:41px; line-height:41px" @click="switchTab(2)">{{$t('message.laborMange.modules1')}}</el-menu-item>
<el-menu-item index="3" style="height:41px; line-height:41px" @click="switchTab(3)">{{$t('message.laborMange.modules2')}}</el-menu-item>
<el-menu-item
index="1"
style="height: 41px; line-height: 41px"
@click="switchTab(1)"
>{{ $t('message.laborMange.modules') }}</el-menu-item
>
<el-menu-item
index="2"
style="height: 41px; line-height: 41px"
@click="switchTab(2)"
>{{ $t('message.laborMange.modules1') }}</el-menu-item
>
<el-menu-item
index="3"
style="height: 41px; line-height: 41px"
@click="switchTab(3)"
>{{ $t('message.laborMange.modules2') }}</el-menu-item
>
</el-menu>
</div>
<div class="content_right"></div>
<!-- 劳务人员 -->
<Labor v-if="showModule==1" class="labor_module" />
<Labor v-if="showModule == 1" class="labor_module" />
<!-- 管理人员 -->
<Admin v-if="showModule==2" />
<Admin v-if="showModule == 2" />
<!-- 临时人员 -->
<Temporary v-if="showModule==3" />
<Temporary v-if="showModule == 3" />
</div>
</template>
<script>
import Labor from "./personModule/laborComponent";
import Admin from "./personModule/administration";
import Temporary from "./personModule/temporary";
import Labor from './personModule/laborComponent'
import Admin from './personModule/administration'
import Temporary from './personModule/temporary'
export default {
name: "personManage",
name: 'personManage',
components: {
Labor,
Admin,
@ -36,33 +51,30 @@ export default {
},
data() {
return {
showModule: 1,
};
showModule: 1
}
},
created(){
created() {
//
if(localStorage.getItem('showPersonModule')){
this.switchTab(Number(localStorage.getItem('showPersonModule')));
if (localStorage.getItem('showPersonModule')) {
this.switchTab(Number(localStorage.getItem('showPersonModule')))
localStorage.removeItem('showPersonModule')
}
},
methods: {
switchTab(type) {
if (type == this.showModule) return;
if(type == 1){
window._paq.push(['trackEvent', '点击', '劳务人员','切换为劳务人员' ])
}
else if(type == 2){
window._paq.push(['trackEvent', '点击', '管理人员','切换为管理人员' ])
}
else if(type == 3){
window._paq.push(['trackEvent', '点击', '临时人员','切换为临时人员' ])
}
this.showModule = type;
},
},
};
if (type == this.showModule) return
if (type == 1) {
window._paq.push(['trackEvent', '点击', '劳务人员', '切换为劳务人员'])
} else if (type == 2) {
window._paq.push(['trackEvent', '点击', '管理人员', '切换为管理人员'])
} else if (type == 3) {
window._paq.push(['trackEvent', '点击', '临时人员', '切换为临时人员'])
}
this.showModule = type
}
}
}
</script>
<style lang="less" scoped>
.personManage {
@ -83,10 +95,11 @@ export default {
top: 0;
left: 0;
}
/deep/ .el-dialog__title, .pageTitle{
/deep/ .el-dialog__title,
.pageTitle {
font-weight: 700 !important;
}
.el-menu-item{
.el-menu-item {
width: 33.333%;
text-align: center;
padding: 0 16px !important;

View File

@ -4724,7 +4724,7 @@
"flv.js@^1.6.2":
"integrity" "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A=="
"resolved" "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz"
"resolved" "https://registry.npmjs.org/flv.js/-/flv.js-1.6.2.tgz"
"version" "1.6.2"
dependencies:
"es6-promise" "^4.2.8"
@ -5962,7 +5962,7 @@
"js-md5@^0.7.3":
"integrity" "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
"resolved" "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz"
"resolved" "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz"
"version" "0.7.3"
"js-message@1.0.5":