This commit is contained in:
BianLzhaoMin 2025-08-21 14:12:00 +08:00
parent 9a76774199
commit 62fb3f9b73
14 changed files with 284 additions and 48 deletions

Binary file not shown.

Binary file not shown.

View File

@ -51,3 +51,10 @@ export const importEntryPersonAPI = (data) => {
data, data,
}) })
} }
// 修改人员的红绿灯状态
export const updatePersonLightStatusAPI = (id) => {
return request({
url: `/bmw/workerWageCard/light/${id}`,
method: 'POST',
})
}

View File

@ -40,7 +40,7 @@ export const uploadExitFileAPI = (data) => {
export const deleteEntryPersonAPI = (data) => { export const deleteEntryPersonAPI = (data) => {
return request({ return request({
url: `/bmw/worker/delete/${data.id}`, url: `/bmw/worker/delete/${data.id}`,
method: 'post', method: 'POST',
}) })
} }
@ -48,14 +48,14 @@ export const deleteEntryPersonAPI = (data) => {
export const getEntryPersonDetailAPI = (data) => { export const getEntryPersonDetailAPI = (data) => {
return request({ return request({
url: `/bmw/worker/select/${data.id}`, url: `/bmw/worker/select/${data.id}`,
method: 'post', method: 'POST',
}) })
} }
// 人员出场 修改人员接口 // 人员出场 修改人员接口
export const editEntryPersonAPI = (data) => { export const editEntryPersonAPI = (data) => {
return request({ return request({
url: `/bmw/worker/edit`, url: `/bmw/worker/edit`,
method: 'post', method: 'POST',
data, data,
}) })
} }
@ -64,7 +64,15 @@ export const editEntryPersonAPI = (data) => {
export const getExitPersonListAPI = (data) => { export const getExitPersonListAPI = (data) => {
return request({ return request({
url: '/bmw/workerExit/list', url: '/bmw/workerExit/list',
method: 'get', method: 'GET',
params: data, params: data,
}) })
} }
// 人员出场后 查看工资结算确认单
export const getExitFileAPI = (id) => {
return request({
url: `/bmw/workerExit/lookFile/${id}`,
method: 'POST',
})
}

View File

@ -103,6 +103,7 @@ export default {
methods: { methods: {
// //
async handleRemove(file, fileList) { async handleRemove(file, fileList) {
this.$emit('onUploadChange', fileList)
// if (file.response && file.response.data.length > 0) { // if (file.response && file.response.data.length > 0) {
// this.$emit('deleteFile', { // this.$emit('deleteFile', {
// filePath: file.response.data[0].filePath, // filePath: file.response.data[0].filePath,
@ -190,6 +191,7 @@ export default {
handleChange(file, fileList) { handleChange(file, fileList) {
console.log(file, fileList, 'file, fileList') console.log(file, fileList, 'file, fileList')
this.$emit('update:fileList', fileList) this.$emit('update:fileList', fileList)
this.$emit('onUploadChange', fileList)
}, },
}, },

View File

@ -133,6 +133,10 @@ export default {
type: [String, Number], type: [String, Number],
default: '', default: '',
}, },
workerId: {
type: [String, Number],
default: '',
},
}, },
data() { data() {
return { return {
@ -203,9 +207,10 @@ export default {
this.download( this.download(
'/bmw/workerLight/attExportByWorkerMsg', '/bmw/workerLight/attExportByWorkerMsg',
{ {
teamId: this.teamId,
proId: this.proId, proId: this.proId,
teamId: this.teamId,
idNumber: this.idNumber, idNumber: this.idNumber,
workerId: this.workerId,
startDate: this.timeRange[0], startDate: this.timeRange[0],
endDate: this.timeRange[1], endDate: this.timeRange[1],
}, },
@ -216,9 +221,10 @@ export default {
// //
async getAttendanceDetailsListData() { async getAttendanceDetailsListData() {
const params = { const params = {
teamId: this.teamId,
proId: this.proId, proId: this.proId,
teamId: this.teamId,
idNumber: this.idNumber, idNumber: this.idNumber,
workerId: this.workerId,
startDate: this.timeRange[0], startDate: this.timeRange[0],
endDate: this.timeRange[1], endDate: this.timeRange[1],
} }

View File

@ -52,6 +52,7 @@
<AttendanceDetails <AttendanceDetails
:proId="proId" :proId="proId"
:teamId="teamId" :teamId="teamId"
:workerId="workerId"
:idNumber="idNumber" :idNumber="idNumber"
/> />
</template> </template>
@ -97,7 +98,8 @@ export default {
personDialogConfig, personDialogConfig,
getPersonListAPI, getPersonListAPI,
idNumber: '', idNumber: '',
slots: ['attDay', 'notAttNum'], workerId: '',
slots: ['attNum', 'notAttNum'],
} }
}, },
methods: { methods: {
@ -120,6 +122,7 @@ export default {
// //
onHandleCheckPerson(data) { onHandleCheckPerson(data) {
this.idNumber = data.idNumber this.idNumber = data.idNumber
this.workerId = data.workerId
this.personDialogConfig.outerVisible = true this.personDialogConfig.outerVisible = true
}, },
}, },

View File

@ -20,7 +20,14 @@
v-model="idCardReaderForm.idCardReaderAddress" v-model="idCardReaderForm.idCardReaderAddress"
/> />
<span class="tip-text"> <span
class="tip-text"
style="
width: 10%;
text-align: right;
display: inline-block;
"
>
{{ isConnected ? '已连接' : '未连接' }} {{ isConnected ? '已连接' : '未连接' }}
</span> </span>
</el-form-item> </el-form-item>
@ -189,6 +196,7 @@
:limit="1" :limit="1"
:file-size="10" :file-size="10"
:multiple="true" :multiple="true"
@onUploadChange="onUploadChange"
:file-type="['jpg', 'png', 'jpeg']" :file-type="['jpg', 'png', 'jpeg']"
:file-list.sync="idCardInfoForm.faceImg" :file-list.sync="idCardInfoForm.faceImg"
:is-uploaded="idCardInfoForm.faceImg.length >= 1" :is-uploaded="idCardInfoForm.faceImg.length >= 1"
@ -580,6 +588,7 @@ import {
addEntryPersonAPI, addEntryPersonAPI,
editEntryPersonAPI, editEntryPersonAPI,
getEntryPersonDetailAPI, getEntryPersonDetailAPI,
updatePersonLightStatusAPI,
} from '@/api/construction-person/entry-and-exit-manage/person-entry' } from '@/api/construction-person/entry-and-exit-manage/person-entry'
import { import {
getSubSelectListByConditionAPI, getSubSelectListByConditionAPI,
@ -1207,6 +1216,19 @@ export default {
? '修改人员成功' ? '修改人员成功'
: '新增人员成功', : '新增人员成功',
) )
// 绿
const result =
await updatePersonLightStatusAPI(
this.queryDetailsId
? this.workerId
: res.data.id,
)
console.log(
result,
'result红绿灯状态更新结果',
)
resolve() resolve()
} else { } else {
this.$modal.msgError(res.msg) this.$modal.msgError(res.msg)
@ -1542,9 +1564,13 @@ export default {
this.webSocket.close() this.webSocket.close()
}, },
// //
downloadIdCardReaderDriver() { onUploadChange(fileList) {
// window.open(this.idCardReaderForm.idCardReaderAddress) console.log('人脸照片验证', fileList)
if (fileList.length > 0) {
//
}
}, },
}, },

View File

@ -96,6 +96,7 @@
> >
<AddOrEditForm <AddOrEditForm
:formType="formType" :formType="formType"
:workerId="workerId"
:einStatus="einStatus" :einStatus="einStatus"
ref="addOrEditFormContentRef" ref="addOrEditFormContentRef"
:queryDetailsId="queryDetailsId" :queryDetailsId="queryDetailsId"
@ -178,11 +179,12 @@ export default {
formLabel, formLabel,
columnsList, columnsList,
dialogConfig, dialogConfig,
getEntryPersonListAPI, workerId: '', // id
queryDetailsId: '', // id
einStatus: 1, //
formType: 1, // formType: 1, //
einStatus: 1, //
queryDetailsId: '', // id
importFileList: [], // importFileList: [], //
getEntryPersonListAPI,
} }
}, },
methods: { methods: {
@ -207,9 +209,11 @@ export default {
this.formType = type this.formType = type
if (type === 2) { if (type === 2) {
this.queryDetailsId = data.id this.queryDetailsId = data.id
this.workerId = data.workerId
this.einStatus = data.einStatus this.einStatus = data.einStatus
this.dialogConfig.outerVisible = true this.dialogConfig.outerVisible = true
} else { } else {
this.workerId = ''
this.queryDetailsId = '' this.queryDetailsId = ''
this.dialogConfig.outerVisible = true this.dialogConfig.outerVisible = true
} }
@ -265,6 +269,7 @@ export default {
// //
async onHandleDownloadTemplate() { async onHandleDownloadTemplate() {
window.open(window.origin + '/人员入场-模版.xlsx')
// this.download( // this.download(
// '/bmw/download/workerEinTemplate', // '/bmw/download/workerEinTemplate',
// {}, // {},

View File

@ -47,7 +47,7 @@
/> />
<el-table-column <el-table-column
align="center" align="center"
prop="endTime" prop="exitTime"
label="出场时间" label="出场时间"
show-overflow-tooltip show-overflow-tooltip
/> />
@ -57,21 +57,104 @@
label="离场人员工资结算确认单" label="离场人员工资结算确认单"
> >
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-tag
size="mini"
type="danger"
v-if="row.isUploadFile == 0"
>
未上传
{{
row.daysSinceExit * 1 > 0
? '' + row.daysSinceExit + '天)'
: ''
}}
</el-tag>
<el-button <el-button
type="text" type="text"
size="mini" size="mini"
style="margin-left: 5px"
@click="onHandlePersonExit(row)"
v-if="
row.isUploadFile == 0 &&
row.einStatus === 2 &&
row.daysSinceExit * 1 < 31
"
>
点击上传
</el-button>
<el-tag
size="mini"
type="success"
style="cursor: pointer"
v-if="row.isUploadFile == 1"
@click="onHandlePreviewFile(row)" @click="onHandlePreviewFile(row)"
> >
3 查看
</el-button> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<template v-if="dialogConfig.outerTitle === '人员出场'">
<PersonExitForm
ref="personExitFormRef"
:exitFormData="exitFormData"
:isExitUpload="isExitUpload"
/>
<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-if="dialogConfig.outerTitle === '工资结算确认单'">
<el-row
:key="item.id"
v-for="item in fileList"
style="margin-bottom: 10px"
>
<el-col :span="20">
<el-tag>{{ item.originFileName }}</el-tag>
</el-col>
<el-col :span="4">
<span
class="cursor-blue"
@click="onHandleDownload(item)"
>
下载
</span>
</el-col>
</el-row>
</template>
</template>
</DialogModel>
</div> </div>
</template> </template>
<script> <script>
import { getPersonEntryAndExitRecordAPI } from '@/api/construction-person/entry-and-exit-manage/person-exit' import DialogModel from '@/components/DialogModel'
import PersonExitForm from './person-exit-form.vue'
import {
getExitFileAPI,
getPersonEntryAndExitRecordAPI,
} from '@/api/construction-person/entry-and-exit-manage/person-exit'
export default { export default {
name: 'EntryExitRecord', name: 'EntryExitRecord',
props: { props: {
@ -80,9 +163,23 @@ export default {
default: '', default: '',
}, },
}, },
components: {
DialogModel,
PersonExitForm,
},
data() { data() {
return { return {
fileList: [],
isExitUpload: 2,
exitFormData: {},
entryExitRecordList: [], entryExitRecordList: [],
dialogConfig: {
outerVisible: false,
outerTitle: '人员出场',
outerWidth: '',
minHeight: '',
maxHeight: '',
},
} }
}, },
@ -96,8 +193,58 @@ export default {
}, },
// //
onHandlePreviewFile(row) { async onHandlePreviewFile(row) {
console.log(row, '查看附件') const { data: res } = await getExitFileAPI(row.id)
this.fileList = res
this.dialogConfig.outerTitle = '工资结算确认单'
this.dialogConfig.outerWidth = '30%'
this.dialogConfig.outerVisible = true
},
//
onHandlePersonExit(data) {
const {
id,
name,
proId,
proName,
subName,
idNumber,
workerId,
teamName,
} = data
this.exitFormData = {
id,
name,
proId,
proName,
subName,
teamName,
idNumber,
workerId,
}
this.dialogConfig.outerVisible = true
},
//
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
//
async onHandleConfirmAddOrEdit() {
try {
await this.$refs.personExitFormRef.onHandleConfirmAddOrEditFun()
this.handleCloseDialogOuter()
} catch (error) {
// console.log('', error)
}
},
//
onHandleDownload(item) {
window.open(item.lsUrl, '_blank')
}, },
}, },

View File

@ -2,8 +2,9 @@
<!-- 新增或修改标段工程表单 --> <!-- 新增或修改标段工程表单 -->
<div> <div>
<el-form <el-form
label-width="140px" label-width="160px"
ref="addOrEditFormRef" ref="personExitFormRef"
:rules="personExitFormRules"
:model="personExitFormData" :model="personExitFormData"
> >
<el-row> <el-row>
@ -56,7 +57,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="离场工资结算确认单"> <el-form-item label="离场工资结算确认单" prop="fileList">
<UploadFileFormData <UploadFileFormData
:limit="3" :limit="3"
:file-size="20" :file-size="20"
@ -111,6 +112,15 @@ export default {
teamName: '', teamName: '',
fileList: [], fileList: [],
}, },
personExitFormRules: {
fileList: [
{
trigger: 'change,blur',
required: this.isExitUpload === 2,
message: '请上传离场工资结算确认单',
},
],
},
} }
}, },
methods: { methods: {
@ -124,6 +134,7 @@ export default {
id, id,
proId, proId,
workerId, workerId,
exitWay: '后端',
} }
const fileMsg = [] const fileMsg = []
const formData = new FormData() const formData = new FormData()
@ -150,35 +161,41 @@ export default {
reject(new Error(res.msg)) reject(new Error(res.msg))
} }
} else { } else {
const { id, fileList } = this.personExitFormData this.$refs.personExitFormRef.validate(async (valid) => {
const params = { if (valid) {
id, const { id, fileList } = this.personExitFormData
} const params = {
id,
}
const fileMsg = [] const fileMsg = []
const formData = new FormData() const formData = new FormData()
if (fileList.length > 0) { if (fileList.length > 0) {
fileList.forEach((e) => { fileList.forEach((e) => {
formData.append('files', e.raw) formData.append('files', e.raw)
fileMsg.push({ fileMsg.push({
name: '工资结算确认单', name: '工资结算确认单',
type: 1, type: 1,
}) })
}) })
} }
formData.append('params', JSON.stringify(params)) formData.append('params', JSON.stringify(params))
formData.append('fileMsg', JSON.stringify(fileMsg)) formData.append('fileMsg', JSON.stringify(fileMsg))
const res = await uploadExitFileAPI(formData) const res = await uploadExitFileAPI(formData)
if (res.code === 200) { if (res.code === 200) {
this.$modal.msgSuccess('上传成功') this.$modal.msgSuccess('上传成功')
resolve() resolve()
} else { } else {
this.$modal.msgError(res.msg) this.$modal.msgError(res.msg)
reject(new Error(res.msg)) reject(new Error(res.msg))
} }
} else {
reject(new Error('请上传离场工资结算确认单'))
}
})
} }
}) })
}, },

View File

@ -146,6 +146,7 @@ import {
uploadContractAPI, uploadContractAPI,
getContractDetailAPI, getContractDetailAPI,
} from '@/api/construction-person/red-green-light-mange/contract-witness' } from '@/api/construction-person/red-green-light-mange/contract-witness'
import { updatePersonLightStatusAPI } from '@/api/construction-person/entry-and-exit-manage/person-entry'
export default { export default {
name: 'ContractWitnessUpload', name: 'ContractWitnessUpload',
props: { props: {
@ -362,6 +363,11 @@ export default {
const res = await uploadContractAPI(formData) const res = await uploadContractAPI(formData)
if (res.code === 200) { if (res.code === 200) {
this.$modal.msgSuccess('合同上传成功') this.$modal.msgSuccess('合同上传成功')
// 绿
const result = await updatePersonLightStatusAPI(
this.workerId,
)
console.log(result, 'result红绿灯状态更新结果')
resolve() resolve()
} else { } else {
this.$modal.msgError(res.msg) this.$modal.msgError(res.msg)

View File

@ -411,6 +411,7 @@ export default {
// //
async onHandleDownloadTemplate() { async onHandleDownloadTemplate() {
window.open(window.origin + '/失信人员-模板.xlsx')
// this.download( // this.download(
// '/bmw/download/workerEinTemplate', // '/bmw/download/workerEinTemplate',
// {}, // {},

View File

@ -115,6 +115,7 @@ import {
uploadWageCardAPI, uploadWageCardAPI,
getContractDetailAPI, getContractDetailAPI,
} from '@/api/construction-person/red-green-light-mange/wage-card-witness' } from '@/api/construction-person/red-green-light-mange/wage-card-witness'
import { updatePersonLightStatusAPI } from '@/api/construction-person/entry-and-exit-manage/person-entry'
export default { export default {
name: 'AddOrEditForm', name: 'AddOrEditForm',
props: { props: {
@ -320,6 +321,13 @@ export default {
if (res.code === 200) { if (res.code === 200) {
this.$modal.msgSuccess('工资卡信息上传成功') this.$modal.msgSuccess('工资卡信息上传成功')
// 绿
const result = await updatePersonLightStatusAPI(
this.workerId,
)
console.log(result, 'result红绿灯状态更新结果')
resolve() resolve()
} else { } else {
this.$modal.msgError(res.msg) this.$modal.msgError(res.msg)