This commit is contained in:
parent
ec6e97d549
commit
271dd7a8de
|
|
@ -27,7 +27,7 @@ export const getSubTeamListAPI = (data) => {
|
|||
// 获取7天未打卡列表
|
||||
export const getSevenDaysNoAttendanceListAPI = (data) => {
|
||||
return request({
|
||||
url: '/bmw/pmAttDevice/list',
|
||||
url: '/bmw/workerLight/getSevenNotAttListByTeam',
|
||||
method: 'GET',
|
||||
params: data,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import request from '@/utils/request'
|
||||
import requestFormData from '@/utils/request_formdata'
|
||||
|
||||
// 红绿灯统计 失信人员列表查询接口
|
||||
export const getDishonestyPersonListAPI = (data) => {
|
||||
|
|
@ -24,3 +25,20 @@ export const removeDishonestyPersonAPI = (id) => {
|
|||
method: 'POST',
|
||||
})
|
||||
}
|
||||
|
||||
// 红绿灯统计 导入失信人员
|
||||
export const importDishonestyPersonAPI = (data) => {
|
||||
return requestFormData({
|
||||
url: '/bmw/workerBlack/workerBlackImport',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
// 红绿灯统计 下载模板
|
||||
export const downloadDishonestyPersonTemplateAPI = () => {
|
||||
return request({
|
||||
url: '/bmw/download/workerEinTemplate',
|
||||
method: 'GET',
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@
|
|||
v-if="item.f_type === 'dateRange'"
|
||||
v-model="queryParams[item.f_model]"
|
||||
@change="onChangeTime($event, item.dateType)"
|
||||
:picker-options="pickerOptions"
|
||||
/>
|
||||
<el-input-number
|
||||
:min="0"
|
||||
|
|
@ -265,6 +266,16 @@ export default {
|
|||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
// 是否显示当天日期
|
||||
isCurrentDate: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// 是否只可选择一个月的范围
|
||||
isOneMonth: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
/* 根据操作栏控制表头是否显示 */
|
||||
|
|
@ -320,6 +331,9 @@ export default {
|
|||
idCount: 1,
|
||||
// 日期查询条件 字段名称
|
||||
typeList: [],
|
||||
|
||||
// 日期选择器配置
|
||||
pickerOptions: {},
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -334,6 +348,26 @@ export default {
|
|||
this.$set(this.queryParams, e.dateType[0], '')
|
||||
this.$set(this.queryParams, e.dateType[1], '')
|
||||
this.typeList = e.dateType
|
||||
|
||||
if (this.isOneMonth) {
|
||||
this.pickerOptions = {
|
||||
disabledDate: (time) => {
|
||||
// 禁用今天之后的日期
|
||||
return time.getTime() > Date.now()
|
||||
},
|
||||
onPick: ({ maxDate, minDate }) => {
|
||||
// 当选择第一个日期后,设置第二个日期的可选范围
|
||||
this.pickerOptions.minDate = minDate
|
||||
if (minDate) {
|
||||
const maxRangeDate = new Date(minDate)
|
||||
maxRangeDate.setMonth(minDate.getMonth() + 1)
|
||||
this.pickerOptions.maxDate = maxRangeDate
|
||||
} else {
|
||||
this.pickerOptions.maxDate = null
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.$set(this.queryParams, e.f_model, '')
|
||||
}
|
||||
|
|
@ -393,15 +427,27 @@ export default {
|
|||
resetQuery() {
|
||||
this.$refs.queryFormRef.resetFields()
|
||||
if (this.typeList.length > 1) {
|
||||
this.queryParams[this.typeList[0]] = ''
|
||||
this.queryParams[this.typeList[1]] = ''
|
||||
this.queryParams.time = []
|
||||
if (this.isCurrentDate) {
|
||||
this.queryParams[this.typeList[0]] = new Date()
|
||||
.toISOString()
|
||||
.split('T')[0]
|
||||
this.queryParams[this.typeList[1]] = new Date()
|
||||
.toISOString()
|
||||
.split('T')[0]
|
||||
this.queryParams.time = [
|
||||
new Date().toISOString().split('T')[0],
|
||||
new Date().toISOString().split('T')[0],
|
||||
]
|
||||
} else {
|
||||
this.queryParams[this.typeList[0]] = ''
|
||||
this.queryParams[this.typeList[1]] = ''
|
||||
this.queryParams.time = []
|
||||
}
|
||||
} else {
|
||||
this.queryParams[this.typeList[0]] = ''
|
||||
}
|
||||
this.queryParams.pageNum = 1
|
||||
this.queryParams.pageSize = 10
|
||||
this.queryParams.time = []
|
||||
this.getTableList()
|
||||
},
|
||||
/** 级联选择 */
|
||||
|
|
@ -475,12 +521,34 @@ export default {
|
|||
|
||||
/* 时间change事件 */
|
||||
onChangeTime(e, type) {
|
||||
console.log(e, '时间', type)
|
||||
const [_1, _2] = type
|
||||
const [_time1, _time2] = e
|
||||
if (e.length > 0) {
|
||||
this.queryParams[_1] = _time1
|
||||
this.queryParams[_2] = _time2
|
||||
if (this.isOneMonth) {
|
||||
if (e && e.length === 2) {
|
||||
const [start, end] = e
|
||||
const startDate = new Date(start)
|
||||
const endDate = new Date(end)
|
||||
// 计算两个日期之间的天数差
|
||||
const diffTime = Math.abs(endDate - startDate)
|
||||
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
|
||||
// 如果超过31天,自动调整结束日期
|
||||
if (diffDays > 31) {
|
||||
const newEndDate = new Date(startDate)
|
||||
newEndDate.setDate(startDate.getDate() + 31)
|
||||
this.queryParams.time = [
|
||||
start,
|
||||
newEndDate.toISOString().split('T')[0],
|
||||
]
|
||||
this.$message.warning(
|
||||
'选择的时间范围超过31天,查询将会缓慢,已自动调整',
|
||||
)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const [_1, _2] = type
|
||||
const [_time1, _time2] = e
|
||||
if (e.length > 0) {
|
||||
this.queryParams[_1] = _time1
|
||||
this.queryParams[_2] = _time2
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -199,7 +199,19 @@ export default {
|
|||
this.getAttendanceDetailsListData()
|
||||
},
|
||||
// 导出
|
||||
onHandleExportAttendanceDetails() {},
|
||||
onHandleExportAttendanceDetails() {
|
||||
this.download(
|
||||
'/bmw/workerLight/attExportByWorkerMsg',
|
||||
{
|
||||
teamId: this.teamId,
|
||||
proId: this.proId,
|
||||
idNumber: this.idNumber,
|
||||
startDate: this.timeRange[0],
|
||||
endDate: this.timeRange[1],
|
||||
},
|
||||
'考勤详情.xlsx',
|
||||
)
|
||||
},
|
||||
|
||||
// 获取考勤详情列表
|
||||
async getAttendanceDetailsListData() {
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ export const formLabel = [
|
|||
|
||||
export const columnsList = [
|
||||
{ t_label: '分公司', t_slot: 'subComName' },
|
||||
{ t_props: 'buildProNum', t_label: '在建工程数量' },
|
||||
{ t_props: 'completedProNum', t_label: '完工工程数量' },
|
||||
{ t_props: 'preProNum', t_label: '筹建工程数量' },
|
||||
{ t_props: 'subNum', t_label: '分包数量' },
|
||||
{ t_props: 'teamNum', t_label: '班组数量' },
|
||||
{ t_props: 'einNum', t_label: '在场人数' },
|
||||
{ t_props: 'attNum', t_label: '考勤人数' },
|
||||
{ t_slot: 'buildProNum', t_label: '在建工程数量' },
|
||||
{ t_slot: 'completedProNum', t_label: '完工工程数量' },
|
||||
{ t_slot: 'preProNum', t_label: '筹建工程数量' },
|
||||
{ t_slot: 'subNum', t_label: '分包数量' },
|
||||
{ t_slot: 'teamNum', t_label: '班组数量' },
|
||||
{ t_slot: 'einNum', t_label: '在场人数' },
|
||||
{ t_slot: 'attNum', t_label: '考勤人数' },
|
||||
]
|
||||
|
||||
export const dialogConfig = {
|
||||
|
|
@ -39,16 +39,7 @@ export const projectFormLabel = [
|
|||
f_model: 'proStatus',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [
|
||||
{
|
||||
label: '在建',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '完工',
|
||||
value: 2,
|
||||
},
|
||||
],
|
||||
f_selList: [],
|
||||
},
|
||||
{
|
||||
f_label: '日期',
|
||||
|
|
@ -60,11 +51,11 @@ export const projectFormLabel = [
|
|||
|
||||
export const projectColumnsList = [
|
||||
{ t_slot: 'proName', t_label: '工程名称' },
|
||||
{ t_props: 'orgName', t_label: '工程状态' },
|
||||
{ t_props: 'subNum', t_label: '分包数量' },
|
||||
{ t_slot: 'proStatus', t_label: '工程状态' },
|
||||
{ t_slot: 'subNum', t_label: '分包数量' },
|
||||
{ t_slot: 'teamNum', t_label: '班组数量' },
|
||||
{ t_props: 'einNum', t_label: '在场人数' },
|
||||
{ t_props: 'attNum', t_label: '考勤人数' },
|
||||
{ t_slot: 'einNum', t_label: '在场人数' },
|
||||
{ t_slot: 'attNum', t_label: '考勤人数' },
|
||||
]
|
||||
|
||||
export const projectDialogConfig = {
|
||||
|
|
@ -99,14 +90,14 @@ export const subTeamFormLabel = [
|
|||
|
||||
export const subTeamColumnsList = [
|
||||
{ t_props: 'proName', t_label: '工程名称' },
|
||||
{ t_props: 'orgName', t_label: '分包名称' },
|
||||
{ t_props: 'subName', t_label: '分包名称' },
|
||||
{ t_slot: 'teamName', t_label: '班组名称' },
|
||||
{ t_slot: 'proType', t_label: '班组状态' },
|
||||
{ t_props: 'einNum', t_label: '在场人数' },
|
||||
{ t_props: 'attNum', t_label: '考勤人数' },
|
||||
{ t_slot: 'teamEinStatus', t_label: '班组状态' },
|
||||
{ t_slot: 'einNum', t_label: '在场人数' },
|
||||
{ t_slot: 'attNum', t_label: '考勤人数' },
|
||||
{
|
||||
t_label: '连续七天未打卡',
|
||||
t_slot: 'noAttendance',
|
||||
t_slot: 'sevenNotAttNum',
|
||||
},
|
||||
]
|
||||
|
||||
|
|
@ -129,8 +120,12 @@ export const personFormLabel = [
|
|||
{
|
||||
f_label: '状态',
|
||||
f_model: 'status',
|
||||
f_type: 'ipt',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [
|
||||
{ value: 1, label: '正常' },
|
||||
{ value: 2, label: '异常' },
|
||||
],
|
||||
},
|
||||
{
|
||||
f_label: '日期',
|
||||
|
|
@ -147,9 +142,9 @@ export const personColumnsList = [
|
|||
{ t_props: 'phone', t_label: '联系方式' },
|
||||
{ t_props: 'postName', t_label: '工种' },
|
||||
{ t_props: 'subName', t_label: '所属分包' },
|
||||
{ t_props: 'attDay', t_label: '考勤天数' },
|
||||
{ t_slot: 'attDay', t_label: '考勤天数' },
|
||||
{
|
||||
t_props: 'notAttNum',
|
||||
t_slot: 'notAttNum',
|
||||
t_label: '缺勤天数',
|
||||
},
|
||||
]
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@
|
|||
{{ data.subComName }}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template v-for="item in slots" :slot="item" slot-scope="{ data }">
|
||||
<span :key="item">{{ data[item] }}</span>
|
||||
</template>
|
||||
</TableModel>
|
||||
|
||||
<DialogModel
|
||||
|
|
@ -55,6 +59,16 @@ export default {
|
|||
sendParams: {
|
||||
startDate: new Date().toISOString().split('T')[0], // 默认查询当天
|
||||
},
|
||||
|
||||
slots: [
|
||||
'buildProNum',
|
||||
'completedProNum',
|
||||
'preProNum',
|
||||
'subNum',
|
||||
'teamNum',
|
||||
'einNum',
|
||||
'attNum',
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@
|
|||
<div class="app-container">
|
||||
<TableModel
|
||||
:showOperation="false"
|
||||
:showRightTools="true"
|
||||
:showRightTools="false"
|
||||
:isCurrentDate="true"
|
||||
:isOneMonth="true"
|
||||
ref="personTableRef"
|
||||
:formLabel="personFormLabel"
|
||||
:columnsList="personColumnsList"
|
||||
|
|
@ -17,12 +19,28 @@
|
|||
],
|
||||
}"
|
||||
>
|
||||
<template slot="btn" slot-scope="{ queryParams }">
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="success"
|
||||
icon="el-icon-download"
|
||||
@click="onHandleExportPerson(queryParams)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
<!-- 人员名称 -->
|
||||
<template slot="name" slot-scope="{ data }">
|
||||
<span class="cursor-blue" @click="onHandleCheckPerson(data)">
|
||||
{{ data.name }}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<!-- 数量 -->
|
||||
<template v-for="item in slots" :slot="item" slot-scope="{ data }">
|
||||
<span :key="item">{{ data[item] ? data[item] : 0 }}</span>
|
||||
</template>
|
||||
</TableModel>
|
||||
|
||||
<DialogModel
|
||||
|
|
@ -79,9 +97,21 @@ export default {
|
|||
personDialogConfig,
|
||||
getPersonListAPI,
|
||||
idNumber: '',
|
||||
slots: ['attDay', 'notAttNum'],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 导出
|
||||
onHandleExportPerson(queryParams) {
|
||||
this.download(
|
||||
'/bmw/workerLight/attExportByWorker',
|
||||
{
|
||||
...queryParams,
|
||||
},
|
||||
'人员列表.xlsx',
|
||||
)
|
||||
},
|
||||
|
||||
// 关闭弹框
|
||||
handleCloseDialogOuter() {
|
||||
this.personDialogConfig.outerVisible = false
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<div class="app-container">
|
||||
<TableModel
|
||||
:showOperation="false"
|
||||
:showRightTools="true"
|
||||
:showRightTools="false"
|
||||
ref="projectTableRef"
|
||||
:formLabel="projectFormLabel"
|
||||
:columnsList="projectColumnsList"
|
||||
|
|
@ -13,12 +13,35 @@
|
|||
startDate: new Date().toISOString().split('T')[0],
|
||||
}"
|
||||
>
|
||||
<template slot="btn" slot-scope="{ queryParams }">
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="success"
|
||||
icon="el-icon-download"
|
||||
@click="onHandleExportProject(queryParams)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
<!-- 工程名称 -->
|
||||
<template slot="proName" slot-scope="{ data }">
|
||||
<span class="cursor-blue" @click="onHandleCheckProject(data)">
|
||||
{{ data.proName }}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<!-- 工程状态 -->
|
||||
<template slot="proStatus" slot-scope="{ data }">
|
||||
<el-tag size="mini" :type="initType(data.proStatus)">
|
||||
{{ initProStatus(data.proStatus) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<!-- 数量 -->
|
||||
<template v-for="item in slots" :slot="item" slot-scope="{ data }">
|
||||
<span :key="item">{{ data[item] ? data[item] : 0 }}</span>
|
||||
</template>
|
||||
</TableModel>
|
||||
|
||||
<DialogModel
|
||||
|
|
@ -46,6 +69,7 @@ import {
|
|||
|
||||
export default {
|
||||
name: 'ProjectTable',
|
||||
dicts: ['project_status'],
|
||||
props: {
|
||||
subComId: {
|
||||
type: [String, Number],
|
||||
|
|
@ -65,9 +89,21 @@ export default {
|
|||
projectDialogConfig,
|
||||
getProjectListAPI,
|
||||
proId: '',
|
||||
slots: ['subNum', 'teamNum', 'teamNum', 'einNum', 'attNum'],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 导出
|
||||
onHandleExportProject(queryParams) {
|
||||
this.download(
|
||||
'/bmw/workerLight/attExportByPro',
|
||||
{
|
||||
...queryParams,
|
||||
},
|
||||
'工程列表.xlsx',
|
||||
)
|
||||
},
|
||||
|
||||
// 关闭弹框
|
||||
handleCloseDialogOuter() {
|
||||
this.projectDialogConfig.outerVisible = false
|
||||
|
|
@ -78,6 +114,44 @@ export default {
|
|||
this.proId = data.proId
|
||||
this.projectDialogConfig.outerVisible = true
|
||||
},
|
||||
|
||||
initProStatus(status) {
|
||||
if (typeof status === 'string') {
|
||||
const res = this.dict.type.project_status.find(
|
||||
(item) => item.value == status,
|
||||
)
|
||||
if (res && res.label) {
|
||||
return res.label || ''
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
return status || ''
|
||||
},
|
||||
|
||||
// 初始化工程状态标签
|
||||
initType(data) {
|
||||
if (typeof data === 'string') {
|
||||
const res = this.dict.type.project_status.find(
|
||||
(item) => item.value == data,
|
||||
)
|
||||
|
||||
if (res && res.raw) {
|
||||
return res.raw.listClass || 'primary'
|
||||
}
|
||||
return 'primary' || ''
|
||||
}
|
||||
|
||||
return 'primary' || ''
|
||||
},
|
||||
},
|
||||
|
||||
created() {
|
||||
projectFormLabel.forEach((item) => {
|
||||
if (item.f_model === 'proStatus') {
|
||||
item.f_selList = this.dict.type.project_status
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
<!-- 施工人员 ---- 考勤管理 ---- 考勤统计第二级弹框 分包班组 -->
|
||||
<div class="app-container">
|
||||
<TableModel
|
||||
:showOperation="false"
|
||||
:showRightTools="true"
|
||||
ref="subTeamTableRef"
|
||||
:showOperation="false"
|
||||
:showRightTools="false"
|
||||
:formLabel="subTeamFormLabel"
|
||||
:request-api="getSubTeamListAPI"
|
||||
:columnsList="subTeamColumnsList"
|
||||
|
|
@ -13,19 +13,46 @@
|
|||
startDate: new Date().toISOString().split('T')[0],
|
||||
}"
|
||||
>
|
||||
<template slot="btn" slot-scope="{ queryParams }">
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="success"
|
||||
icon="el-icon-download"
|
||||
@click="onHandleExportSubTeam(queryParams)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
<!-- 班组名称 -->
|
||||
<template slot="teamName" slot-scope="{ data }">
|
||||
<span class="cursor-blue" @click="onHandleCheckTeam(data)">
|
||||
{{ data.teamName || '-' }}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<!-- 班组状态 -->
|
||||
<template slot="teamEinStatus" slot-scope="{ data }">
|
||||
<el-tag
|
||||
size="mini"
|
||||
:type="data.teamEinStatus == 1 ? 'danger' : 'success'"
|
||||
>
|
||||
{{ data.teamEinStatus == 1 ? '出场' : '在场' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<!-- 数量 -->
|
||||
<template v-for="item in slots" :slot="item" slot-scope="{ data }">
|
||||
<span :key="item">{{ data[item] ? data[item] : 0 }}</span>
|
||||
</template>
|
||||
|
||||
<!-- 连续7天未打卡-->
|
||||
<template slot="noAttendance" slot-scope="{ data }">
|
||||
<template slot="sevenNotAttNum" slot-scope="{ data }">
|
||||
<span
|
||||
class="cursor-blue"
|
||||
@click="onHandleCheckNoAttendance(data)"
|
||||
>
|
||||
{{ data.notAttNum || '-' }}
|
||||
{{ data.sevenNotAttNum || 0 }}
|
||||
</span>
|
||||
</template>
|
||||
</TableModel>
|
||||
|
|
@ -37,6 +64,8 @@
|
|||
<template slot="outerContent">
|
||||
<SvenNoAttendance
|
||||
ref="svenNoAttendanceRef"
|
||||
:proId="proId"
|
||||
:teamId="teamId"
|
||||
v-if="subTeamDialogConfig.outerTitle === '连续七天未打卡'"
|
||||
/>
|
||||
|
||||
|
|
@ -80,9 +109,21 @@ export default {
|
|||
subTeamDialogConfig,
|
||||
getSubTeamListAPI,
|
||||
teamId: '',
|
||||
slots: ['einNum', 'attNum'],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 导出
|
||||
onHandleExportSubTeam(queryParams) {
|
||||
this.download(
|
||||
'/bmw/workerLight/attExportByTeam',
|
||||
{
|
||||
...queryParams,
|
||||
},
|
||||
'分包班组列表.xlsx',
|
||||
)
|
||||
},
|
||||
|
||||
// 关闭弹框
|
||||
handleCloseDialogOuter() {
|
||||
this.subTeamDialogConfig.outerVisible = false
|
||||
|
|
@ -97,6 +138,7 @@ export default {
|
|||
|
||||
// 点击7天未打卡 打开连续7天未打卡弹框
|
||||
onHandleCheckNoAttendance(data) {
|
||||
this.teamId = data.teamId
|
||||
this.subTeamDialogConfig.outerTitle = '连续七天未打卡'
|
||||
this.subTeamDialogConfig.outerVisible = true
|
||||
},
|
||||
|
|
|
|||
|
|
@ -3,12 +3,27 @@
|
|||
<div class="app-container">
|
||||
<TableModel
|
||||
:formLabel="formLabel"
|
||||
:showOperation="true"
|
||||
:showRightTools="true"
|
||||
:showOperation="false"
|
||||
:showRightTools="false"
|
||||
:columnsList="columnsList"
|
||||
ref="svenNoAttendanceTableRef"
|
||||
:sendParams="{
|
||||
proId: proId,
|
||||
teamId: teamId,
|
||||
}"
|
||||
:request-api="getSevenDaysNoAttendanceListAPI"
|
||||
>
|
||||
<template slot="btn" slot-scope="{ queryParams }">
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="success"
|
||||
icon="el-icon-download"
|
||||
@click="onHandleExportSvenNoAttendance(queryParams)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
</TableModel>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -17,7 +32,6 @@
|
|||
import TableModel from '@/components/TableModel'
|
||||
import DialogModel from '@/components/DialogModel'
|
||||
import { getSevenDaysNoAttendanceListAPI } from '@/api/construction-person/attendance-manage/attendance-count'
|
||||
|
||||
export default {
|
||||
name: 'SvenNoAttendance',
|
||||
components: {
|
||||
|
|
@ -25,28 +39,50 @@ export default {
|
|||
DialogModel,
|
||||
},
|
||||
|
||||
props: {
|
||||
proId: {
|
||||
type: [String, Number],
|
||||
default: '',
|
||||
},
|
||||
teamId: {
|
||||
type: [String, Number],
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
getSevenDaysNoAttendanceListAPI,
|
||||
formLabel: [
|
||||
{
|
||||
f_label: '姓名',
|
||||
f_model: 'subComId',
|
||||
f_model: 'name',
|
||||
f_type: 'ipt',
|
||||
isShow: false, // 是否展示label
|
||||
},
|
||||
],
|
||||
columnsList: [
|
||||
{ t_label: '姓名', t_props: 'orgName' },
|
||||
{ t_label: '身份证', t_props: 'proName' },
|
||||
{ t_label: '联系方式', t_props: 'proType' },
|
||||
{ t_label: '工种', t_props: 'volLevel' },
|
||||
{ t_label: '所属工程', t_props: 'proAddress' },
|
||||
{ t_label: '所属分包', t_props: 'proAddress' },
|
||||
{ t_label: '所属班组', t_props: 'proAddress' },
|
||||
{ t_label: '最后考勤时间', t_props: 'proAddress' },
|
||||
{ t_label: '姓名', t_props: 'name' },
|
||||
{ t_label: '身份证', t_props: 'idNumber' },
|
||||
{ t_label: '联系方式', t_props: 'phone' },
|
||||
{ t_label: '工种', t_props: 'postName' },
|
||||
{ t_label: '所属工程', t_props: 'proName' },
|
||||
{ t_label: '所属分包', t_props: 'subName' },
|
||||
{ t_label: '所属班组', t_props: 'teamName' },
|
||||
{ t_label: '最后考勤时间', t_props: 'attTime' },
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onHandleExportSvenNoAttendance(queryParams) {
|
||||
this.download(
|
||||
'/bmw/workerLight/attExportBySevenNotAtt',
|
||||
{
|
||||
...queryParams,
|
||||
},
|
||||
'连续7天未打卡.xlsx',
|
||||
)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -134,13 +134,13 @@ export default {
|
|||
// 导出按钮
|
||||
onHandleExportPersonEntry(queryParams) {
|
||||
console.log(queryParams, '导出参数')
|
||||
// this.download(
|
||||
// '/xxx/xxx',
|
||||
// {
|
||||
// ...queryParams,
|
||||
// },
|
||||
// '场人员信息.xlsx',
|
||||
// )
|
||||
this.download(
|
||||
'/bmw/worker/workerEinExport',
|
||||
{
|
||||
...queryParams,
|
||||
},
|
||||
'人员入场列表.xlsx',
|
||||
)
|
||||
},
|
||||
|
||||
// 新增或修改
|
||||
|
|
|
|||
|
|
@ -85,165 +85,211 @@
|
|||
@closeDialogOuter="handleCloseDialogOuter"
|
||||
>
|
||||
<template slot="outerContent">
|
||||
<el-form
|
||||
label-width="auto"
|
||||
:model="addDishonestyPersonForm"
|
||||
ref="addDishonestyPersonFormRef"
|
||||
v-if="dialogConfig.outerVisible"
|
||||
:rules="addDishonestyPersonFormRules"
|
||||
>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入姓名"
|
||||
v-model="addDishonestyPersonForm.name"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="身份证号" prop="idNumber">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入姓名"
|
||||
v-model="addDishonestyPersonForm.idNumber"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="工种" prop="postName">
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择工种"
|
||||
v-model="addDishonestyPersonForm.postName"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in postTypeSelectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="工程名称" prop="proName">
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择工程名称"
|
||||
v-model="addDishonestyPersonForm.proName"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in lotProjectSelectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="所属分包单位" prop="subName">
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择所属分包单位"
|
||||
v-model="addDishonestyPersonForm.subName"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in subSelectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="事件" prop="reason">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入事件"
|
||||
v-model="addDishonestyPersonForm.reason"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="开始日期" prop="startTime">
|
||||
<el-date-picker
|
||||
type="date"
|
||||
style="width: 100%"
|
||||
placeholder="选择开始日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
v-model="addDishonestyPersonForm.startTime"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="结束日期" prop="endTime">
|
||||
<el-date-picker
|
||||
type="date"
|
||||
v-if="!isForever"
|
||||
style="width: 100%"
|
||||
placeholder="选择结束日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
v-model="addDishonestyPersonForm.endTime"
|
||||
/>
|
||||
|
||||
<el-input
|
||||
v-else
|
||||
disabled
|
||||
clearable
|
||||
v-model="addDishonestyPersonForm.endTime"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4">
|
||||
<el-form-item>
|
||||
<el-checkbox
|
||||
v-model="isForever"
|
||||
@change="handleChangeIsForever"
|
||||
>
|
||||
永久
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-row class="dialog-footer-btn">
|
||||
<el-button size="medium" @click="handleCloseDialogOuter">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
size="medium"
|
||||
type="primary"
|
||||
@click="onHandleConfirmAddOrEdit"
|
||||
<template v-if="dialogConfig.outerTitle === '新增失信人员'">
|
||||
<el-form
|
||||
label-width="auto"
|
||||
:model="addDishonestyPersonForm"
|
||||
ref="addDishonestyPersonFormRef"
|
||||
v-if="dialogConfig.outerVisible"
|
||||
:rules="addDishonestyPersonFormRules"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入姓名"
|
||||
v-model="addDishonestyPersonForm.name"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="身份证号" prop="idNumber">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入姓名"
|
||||
v-model="
|
||||
addDishonestyPersonForm.idNumber
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="工种" prop="postName">
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择工种"
|
||||
v-model="
|
||||
addDishonestyPersonForm.postName
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in postTypeSelectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="工程名称" prop="proName">
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择工程名称"
|
||||
v-model="
|
||||
addDishonestyPersonForm.proName
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in lotProjectSelectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item
|
||||
label="所属分包单位"
|
||||
prop="subName"
|
||||
>
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择所属分包单位"
|
||||
v-model="
|
||||
addDishonestyPersonForm.subName
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in subSelectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="事件" prop="reason">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入事件"
|
||||
v-model="addDishonestyPersonForm.reason"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="开始日期" prop="startTime">
|
||||
<el-date-picker
|
||||
type="date"
|
||||
style="width: 100%"
|
||||
placeholder="选择开始日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
v-model="
|
||||
addDishonestyPersonForm.startTime
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="结束日期" prop="endTime">
|
||||
<el-date-picker
|
||||
type="date"
|
||||
v-if="!isForever"
|
||||
style="width: 100%"
|
||||
placeholder="选择结束日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
v-model="
|
||||
addDishonestyPersonForm.endTime
|
||||
"
|
||||
/>
|
||||
|
||||
<el-input
|
||||
v-else
|
||||
disabled
|
||||
clearable
|
||||
v-model="
|
||||
addDishonestyPersonForm.endTime
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4">
|
||||
<el-form-item>
|
||||
<el-checkbox
|
||||
v-model="isForever"
|
||||
@change="handleChangeIsForever"
|
||||
>
|
||||
永久
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-row class="dialog-footer-btn">
|
||||
<el-button
|
||||
size="medium"
|
||||
@click="handleCloseDialogOuter"
|
||||
>
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
size="medium"
|
||||
type="primary"
|
||||
@click="onHandleConfirmAddOrEdit"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<UploadFileFormData
|
||||
:limit="1"
|
||||
:file-size="50"
|
||||
:multiple="false"
|
||||
:file-type="['xls', 'xlsx']"
|
||||
uploadTip="请导入xls、xlsx格式文件"
|
||||
:file-list.sync="importFileList"
|
||||
/>
|
||||
|
||||
<el-row class="dialog-footer-btn">
|
||||
<el-button size="medium" @click="onHandleCancelImport">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
size="medium"
|
||||
type="primary"
|
||||
@click="onHandleConfirmImport"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</template>
|
||||
</DialogModel>
|
||||
</div>
|
||||
|
|
@ -252,6 +298,8 @@
|
|||
<script>
|
||||
import TableModel from '@/components/TableModel'
|
||||
import DialogModel from '@/components/DialogModel'
|
||||
import UploadFileFormData from '@/components/UploadFileFormData'
|
||||
import axios from 'axios'
|
||||
import { formLabel, columnsList, dialogConfig } from './config'
|
||||
import {
|
||||
getSubSelectListCommonFun,
|
||||
|
|
@ -263,12 +311,15 @@ import {
|
|||
addDishonestyPersonAPI,
|
||||
removeDishonestyPersonAPI,
|
||||
getDishonestyPersonListAPI,
|
||||
importDishonestyPersonAPI,
|
||||
downloadDishonestyPersonTemplateAPI,
|
||||
} from '@/api/construction-person/red-green-light-mange/dishonesty-person'
|
||||
export default {
|
||||
name: 'DishonestyPerson',
|
||||
components: {
|
||||
TableModel,
|
||||
DialogModel,
|
||||
UploadFileFormData,
|
||||
},
|
||||
|
||||
data() {
|
||||
|
|
@ -309,20 +360,6 @@ export default {
|
|||
postName: [
|
||||
{ required: true, message: '请输入工种', trigger: 'blur' },
|
||||
],
|
||||
// proName: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '请输入工程名称',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
// ],
|
||||
// subName: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '请输入所属分包单位',
|
||||
// trigger: 'blur',
|
||||
// },
|
||||
// ],
|
||||
reason: [
|
||||
{ required: true, message: '请输入事件', trigger: 'blur' },
|
||||
],
|
||||
|
|
@ -345,6 +382,7 @@ export default {
|
|||
subSelectList: [], // 分包下拉列表
|
||||
postTypeSelectList: [], // 工种下拉列表
|
||||
lotProjectSelectList: [], // 工程下拉列表
|
||||
importFileList: [], // 导入文件列表
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -361,24 +399,22 @@ export default {
|
|||
|
||||
// 新增失信人员
|
||||
onHandleAddDishonestyPerson() {
|
||||
this.dialogConfig.outerTitle = '新增失信人员'
|
||||
this.dialogConfig.outerVisible = true
|
||||
},
|
||||
|
||||
// 导入数据
|
||||
onHandleImportData() {
|
||||
// this.download(
|
||||
// '/xxx/xxx',
|
||||
// {},
|
||||
// '合同信息.xlsx',
|
||||
// )
|
||||
this.dialogConfig.outerTitle = '导入数据'
|
||||
this.dialogConfig.outerVisible = true
|
||||
},
|
||||
|
||||
// 下载模板
|
||||
onHandleDownloadTemplate() {
|
||||
async onHandleDownloadTemplate() {
|
||||
// this.download(
|
||||
// '/xxx/xxx',
|
||||
// '/bmw/download/workerEinTemplate',
|
||||
// {},
|
||||
// '合同信息.xlsx',
|
||||
// '失信人员导入模板.xlsx',
|
||||
// )
|
||||
},
|
||||
|
||||
|
|
@ -433,6 +469,27 @@ export default {
|
|||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 取消上传
|
||||
onHandleCancelImport() {
|
||||
this.importFileList = []
|
||||
this.dialogConfig.outerVisible = false
|
||||
},
|
||||
|
||||
// 确定上传
|
||||
async onHandleConfirmImport() {
|
||||
const formData = new FormData()
|
||||
formData.append('file', this.importFileList[0].raw)
|
||||
const res = await importDishonestyPersonAPI(formData)
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess('导入成功')
|
||||
this.importFileList = []
|
||||
this.dialogConfig.outerVisible = false
|
||||
this.$refs.dishonestyPersonTableRef.getTableList()
|
||||
} else {
|
||||
this.$modal.msgError(res.msg)
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
async created() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue