人员出场接口调试

This commit is contained in:
BianLzhaoMin 2025-08-16 16:55:23 +08:00
parent 3fd238f498
commit 8815c8f5f2
12 changed files with 493 additions and 683 deletions

View File

@ -1,11 +1,11 @@
import request from '@/utils/request' import request from '@/utils/request'
import requestFormData from '@/utils/request_formdata' import requestFormData from '@/utils/request_formdata'
// 人员出场 新增人员接口 // 人员出场 新增人员出场接口
export const addEntryPersonAPI = (data) => { export const addEntryPersonAPI = (data) => {
return requestFormData({ return requestFormData({
url: '/bmw/worker/insert', url: '/bmw/workerExit/exit',
method: 'post', method: 'POST',
data, data,
}) })
} }

View File

@ -52,13 +52,13 @@ export const columnsList = [
t_props: 'subEinTime', t_props: 'subEinTime',
t_label: '分包入场时间', t_label: '分包入场时间',
}, },
{ t_props: 'idCard', t_label: '授权委托书', t_slot: 'idCard' }, { t_label: '授权委托书', t_slot: 'file-1' },
{ {
t_props: 'subExitTime', t_props: 'subExitTime',
t_label: '分包出场时间', t_label: '分包出场时间',
}, },
{ {
t_props: 'electronicSignature', t_slot: 'file-2',
t_label: '工资已支付完成承诺书', t_label: '工资已支付完成承诺书',
}, },
] ]

View File

@ -173,6 +173,7 @@ export default {
subSelectList: [], // subSelectList: [], //
lotProjectSelectList: [], // lotProjectSelectList: [], //
editUploadFileList: [],
} }
}, },
methods: { methods: {
@ -205,14 +206,35 @@ export default {
if (id) { if (id) {
params.id = id params.id = id
let reserveFileList = []
businessLicense.forEach((item) => {
if (item.id) {
reserveFileList.push(item.id)
}
})
if (reserveFileList.length > 0) {
fileIdList = this.editUploadFileList
.filter(
(item) =>
!reserveFileList.includes(item.id),
)
.map((j) => j.id)
if (fileIdList.length > 0) {
params.delIds = fileIdList.join(',')
}
}
} }
businessLicense.forEach((item) => { businessLicense.forEach((item) => {
formData.append('files', item.raw) if (!item.id) {
fileMsg.push({ formData.append('files', item.raw)
type: 1, fileMsg.push({
name: '法定代表人授权书', type: 1,
}) name: '法定代表人授权书',
})
}
}) })
formData.append('fileMsg', JSON.stringify(fileMsg)) formData.append('fileMsg', JSON.stringify(fileMsg))
@ -247,7 +269,14 @@ export default {
const { data: res } = await getSubEntryDetailAPI({ const { data: res } = await getSubEntryDetailAPI({
id: this.queryDetailId, id: this.queryDetailId,
}) })
const { id, subId, proId, subContractName, subContractCode } = res const {
id,
subId,
proId,
subContractName,
subContractCode,
contractFile,
} = res
this.addOrEditForm = { this.addOrEditForm = {
id, id,
@ -255,7 +284,22 @@ export default {
proId, proId,
subContractName, subContractName,
subContractCode, subContractCode,
businessLicense: [], }
if (contractFile && contractFile.length > 0) {
this.addOrEditForm.businessLicense = contractFile
.filter((item) => item.sourceType == 1)
.map((item) => {
return {
id: item.id,
url: item.lsUl,
name: item.fileName,
}
})
this.editUploadFileList = contractFile.filter(
(item) => item.sourceType == 1,
)
} }
}, },
}, },

View File

@ -32,20 +32,6 @@
</el-button> </el-button>
</template> </template>
<!-- 标段工程数量 -->
<!-- <template :slot="item" slot-scope="{ data }" v-for="item in slots">
<span
:style="{
color: data[item] === '已上传' ? '#67C23A' : '#F56C6C',
}"
:key="item"
style="font-size: 12px"
@click="onHandleViewLotProject(data)"
>
{{ data[item] }}
</span>
</template> -->
<template slot="subEinStatus" slot-scope="{ data }"> <template slot="subEinStatus" slot-scope="{ data }">
<el-tag <el-tag
size="mini" size="mini"
@ -54,6 +40,30 @@
{{ data.subEinStatus == 1 ? '在场' : '出场' }} {{ data.subEinStatus == 1 ? '在场' : '出场' }}
</el-tag> </el-tag>
</template> </template>
<template slot="file-1" slot-scope="{ data }">
<span
:style="{
color:
initIsUpload(data, 1) === '已上传'
? '#67C23A'
: '#F56C6C',
}"
>
{{ initIsUpload(data, 1) }}
</span>
</template>
<template slot="file-2" slot-scope="{ data }">
<span
:style="{
color:
initIsUpload(data, 2) === '已上传'
? '#67C23A'
: '#F56C6C',
}"
>
{{ initIsUpload(data, 2) }}
</span>
</template>
<template slot="handle" slot-scope="{ data }"> <template slot="handle" slot-scope="{ data }">
<el-button <el-button
@ -63,6 +73,7 @@
icon="el-icon-check" icon="el-icon-check"
@click="onHandleExit(data)" @click="onHandleExit(data)"
v-hasPermi="['sub:exit:add']" v-hasPermi="['sub:exit:add']"
v-if="data.subEinStatus == 1"
> >
出场 出场
</el-button> </el-button>
@ -72,6 +83,7 @@
type="primary" type="primary"
icon="el-icon-edit" icon="el-icon-edit"
v-hasPermi="['sub:entry:edit']" v-hasPermi="['sub:entry:edit']"
v-if="data.subEinStatus == 1"
@click="onHandleAddOrEditSubEntry(2, data)" @click="onHandleAddOrEditSubEntry(2, data)"
> >
修改 修改
@ -81,6 +93,7 @@
type="danger" type="danger"
icon="el-icon-delete" icon="el-icon-delete"
v-hasPermi="['sub:entry:delete']" v-hasPermi="['sub:entry:delete']"
v-if="data.subEinStatus == 1"
@click="onHandleDeleteSubEntry(data)" @click="onHandleDeleteSubEntry(data)"
> >
删除 删除
@ -89,6 +102,7 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-view" icon="el-icon-view"
v-if="data.subEinStatus == 2"
@click="onHandleViewEntryDetails(data)" @click="onHandleViewEntryDetails(data)"
> >
详情 详情
@ -265,6 +279,17 @@ export default {
this.dialogConfig.outerTitle = '分包入场详情' this.dialogConfig.outerTitle = '分包入场详情'
this.dialogConfig.outerVisible = true this.dialogConfig.outerVisible = true
}, },
//
initIsUpload(data, type) {
if (data.contractFile.length > 0) {
const isUpload = data.contractFile.some(
(item) => item.sourceType == type,
)
return isUpload ? '已上传' : '未上传'
}
return '未上传'
},
}, },
async created() { async created() {

View File

@ -1,7 +1,7 @@
export const formLabel = [ export const formLabel = [
{ {
f_label: '分包合同', f_label: '班组名称',
f_model: 'htName', f_model: 'teamName',
f_type: 'ipt', f_type: 'ipt',
isShow: false, // 是否展示label isShow: false, // 是否展示label
}, },
@ -13,15 +13,25 @@ export const formLabel = [
}, },
{ {
f_label: '工程名称', f_label: '工程名称',
f_model: 'projectName', f_model: 'proName',
f_type: 'ipt', f_type: 'ipt',
isShow: false, // 是否展示label isShow: false, // 是否展示label
}, },
{ {
f_label: '状态', f_label: '状态',
f_model: 'status', f_model: 'teamEinStatus',
f_type: 'sel', f_type: 'sel',
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_selList: [
{
label: '在场',
value: 1,
},
{
label: '出场',
value: 2,
},
],
}, },
] ]
@ -29,14 +39,14 @@ export const columnsList = [
{ t_props: 'subName', t_label: '分包商名称' }, { t_props: 'subName', t_label: '分包商名称' },
{ t_props: 'teamName', t_label: '班组名称' }, { t_props: 'teamName', t_label: '班组名称' },
{ t_props: 'proName', t_label: '班组入场工程名称' }, { t_props: 'proName', t_label: '班组入场工程名称' },
{ t_props: 'teamEinStatus', t_label: '出入场状态' }, { t_slot: 'teamEinStatus', t_label: '出入场状态' },
{ {
t_props: 'teamEinTime', t_props: 'teamEinTime',
t_label: '入场时间', t_label: '入场时间',
}, },
{ t_props: 'teamExitTime', t_label: '出场时间' }, { t_props: 'teamExitTime', t_label: '出场时间' },
{ {
t_props: 'contractFile', t_slot: 'contractFile',
t_label: '施工组承诺书', t_label: '施工组承诺书',
}, },
] ]

View File

@ -8,10 +8,10 @@
检测到分包下存在2个班组12名施工人员未出场 检测到分包下存在2个班组12名施工人员未出场
</div> </div>
<el-form <el-form
:label-width="formType === 2 ? '220px' : '120px'"
ref="addOrEditFormRef" ref="addOrEditFormRef"
:model="addOrEditForm" :model="addOrEditForm"
:rules="addOrEditFormRules" :rules="addOrEditFormRules"
:label-width="formType === 2 || formType === 3 ? '220px' : '120px'"
> >
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
@ -20,7 +20,7 @@
style="width: 100%" style="width: 100%"
@change="onChangeSubIdFun" @change="onChangeSubIdFun"
v-model="addOrEditForm.subId" v-model="addOrEditForm.subId"
:disabled="formType === 2" :disabled="formType === 2 || formType === 3"
> >
<el-option <el-option
:key="item.value" :key="item.value"
@ -39,7 +39,7 @@
style="width: 100%" style="width: 100%"
@change="onChangeTeamIdFun" @change="onChangeTeamIdFun"
v-model="addOrEditForm.teamId" v-model="addOrEditForm.teamId"
:disabled="formType === 2" :disabled="formType === 2 || formType === 3"
> >
<el-option <el-option
:key="item.value" :key="item.value"
@ -58,7 +58,7 @@
style="width: 100%" style="width: 100%"
@change="onChangeProIdFun" @change="onChangeProIdFun"
v-model="addOrEditForm.proId" v-model="addOrEditForm.proId"
:disabled="formType === 2" :disabled="formType === 2 || formType === 3"
> >
<el-option <el-option
:key="item.value" :key="item.value"
@ -70,7 +70,35 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row v-if="formType === 2">
<el-row v-if="formType === 3">
<el-col :span="24">
<el-form-item label="入场日期">
<el-date-picker
disabled
type="date"
style="width: 100%"
value-format="yyyy-MM-dd"
v-model="addOrEditForm.teamEinTime"
/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType === 3">
<el-col :span="24">
<el-form-item label="出场日期">
<el-date-picker
disabled
type="date"
style="width: 100%"
value-format="yyyy-MM-dd"
v-model="addOrEditForm.teamExitTime"
/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="formType === 2 || formType === 3">
<el-col :span="24"> <el-col :span="24">
<el-form-item <el-form-item
prop="businessLicense" prop="businessLicense"
@ -80,7 +108,12 @@
:limit="3" :limit="3"
:file-size="20" :file-size="20"
:multiple="true" :multiple="true"
uploadTip="身份证、银行卡扫描件,承诺书、劳动合同或用工协议扫描件" :is-detail="formType === 3"
:uploadTip="
formType === 3
? ''
: '身份证、银行卡扫描件,承诺书、劳动合同或用工协议扫描件'
"
:file-list.sync="addOrEditForm.businessLicense" :file-list.sync="addOrEditForm.businessLicense"
:file-type="[ :file-type="[
'jpg', 'jpg',
@ -134,6 +167,9 @@ export default {
proName: '', proName: '',
teamName: '', teamName: '',
teamEinStatus: '', teamEinStatus: '',
teamEinTime: '',
teamExitTime: '',
businessLicense: [], businessLicense: [],
}, },
addOrEditFormRules: { addOrEditFormRules: {
@ -288,6 +324,16 @@ export default {
handler(newVal) { handler(newVal) {
if (Object.keys(newVal).length > 0) { if (Object.keys(newVal).length > 0) {
Object.assign(this.addOrEditForm, newVal) Object.assign(this.addOrEditForm, newVal)
if (newVal.contractFile && newVal.contractFile.length > 0) {
this.addOrEditForm.businessLicense =
newVal.contractFile.map((e) => {
return {
url: e.lsUrl,
name: e.fileName,
}
})
}
} }
}, },
deep: true, deep: true,

View File

@ -41,16 +41,32 @@
</el-tag> </el-tag>
</template> </template>
<!-- 施工承诺书 -->
<template slot="contractFile" slot-scope="{ data }">
{{ initContractFile(data) }}
</template>
<template slot="handle" slot-scope="{ data }"> <template slot="handle" slot-scope="{ data }">
<el-button <el-button
plain plain
size="mini" size="mini"
type="success" type="success"
icon="el-icon-check" icon="el-icon-check"
v-if="data.teamEinStatus == 1"
@click="onHandleEntryAndExit(2, data)" @click="onHandleEntryAndExit(2, data)"
> >
出场 出场
</el-button> </el-button>
<el-button
plain
size="mini"
type="primary"
icon="el-icon-view"
v-if="data.teamEinStatus == 2"
@click="onHandleEntryAndExit(3, data)"
>
详情
</el-button>
</template> </template>
</TableModel> </TableModel>
@ -88,10 +104,7 @@ import DialogModel from '@/components/DialogModel'
import EntryAndExitForm from './entry-and-exit-form' import EntryAndExitForm from './entry-and-exit-form'
import { formLabel, columnsList, dialogConfig } from './config' import { formLabel, columnsList, dialogConfig } from './config'
import { import { getTeamEntryListAPI } from '@/api/basic-manage/team-manage/team-entry-and-exit'
deleteTeamEntryAPI,
getTeamEntryListAPI,
} from '@/api/basic-manage/team-manage/team-entry-and-exit'
export default { export default {
name: 'TeamEntryAndExit', name: 'TeamEntryAndExit',
@ -115,16 +128,45 @@ export default {
// //
onHandleExportAllProject(queryParams) { onHandleExportAllProject(queryParams) {
console.log(queryParams, '导出') console.log(queryParams, '导出')
this.download(
'/bmw/subTeamContract/export',
{
...queryParams,
},
`班组出入场列表.xlsx`,
)
}, },
// //
onHandleEntryAndExit(type, data) { onHandleEntryAndExit(type, data) {
this.formType = type this.formType = type
this.dialogConfig.outerTitle = type === 1 ? '班组入场' : '班组出场' this.dialogConfig.outerTitle = type === 1 ? '班组入场' : '班组出场'
if (type === 1) {
this.dialogConfig.outerTitle = '班组入场'
this.editFormData = {}
}
if (type === 2) { if (type === 2) {
const { subId, proId, teamId, id, subName, proName, teamName } = this.dialogConfig.outerTitle = '班组出场'
data }
if (type === 3) {
this.dialogConfig.outerTitle = '详情'
}
if (type === 2 || type === 3) {
const {
subId,
proId,
teamId,
id,
subName,
proName,
teamName,
teamEinTime,
teamExitTime,
contractFile,
} = data
this.editFormData = { this.editFormData = {
id, id,
subId, subId,
@ -133,10 +175,12 @@ export default {
subName, subName,
proName, proName,
teamName, teamName,
teamEinTime,
teamExitTime,
contractFile,
} }
} else {
this.editFormData = {}
} }
this.dialogConfig.outerVisible = true this.dialogConfig.outerVisible = true
}, },
// //
@ -154,6 +198,15 @@ export default {
handleCloseDialogOuter() { handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false this.dialogConfig.outerVisible = false
}, },
//
initContractFile(data) {
if (data.contractFile && data.contractFile.length > 0) {
return '已上传'
} else {
return '-'
}
},
}, },
} }
</script> </script>

View File

@ -1,591 +0,0 @@
<template>
<!-- 新增或修改标段工程表单 -->
<div>
<el-form
label-width="140px"
ref="addOrEditFormRef"
:model="addOrEditForm"
:rules="addOrEditFormRules"
>
<el-row>
<el-col :span="12">
<el-form-item label="身份证读卡器地址" prop="subName">
<el-input
clearable
placeholder="请输入身份证读卡器地址"
v-model="addOrEditForm.subName"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-button size="medium" type="primary" plain>
建立连接
</el-button>
<el-button size="medium" type="primary" plain>
断开连接
</el-button>
<el-button size="medium" type="primary" plain>
下载驱动
</el-button>
</el-form-item>
</el-col>
</el-row>
<TitleTip
titleText="人员信息"
justifyContent="flex-start"
borderBottom="none"
backgroundColor="#f8fafc"
padding="24px 10px"
>
<template>
<span class="tip-text">
(必须填写连接身份证读卡器自动填充数据)
</span>
</template>
</TitleTip>
<el-row>
<el-col :span="12">
<el-form-item label="姓名" prop="phone">
<el-input
clearable
placeholder="请输入姓名"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号" prop="businessAddress">
<el-input
clearable
placeholder="请输入身份证号"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="性别" prop="phone">
<el-input
clearable
placeholder="请输入性别"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生日期" prop="businessAddress">
<el-input
clearable
placeholder="请输入出生日期"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="民族" prop="phone">
<el-input
clearable
placeholder="请输入民族"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="签发机关" prop="businessAddress">
<el-input
clearable
placeholder="请输入签发机关"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="生效日期" prop="phone">
<el-input
clearable
placeholder="请输入生效日期"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="失效日期" prop="businessAddress">
<el-input
clearable
placeholder="请输入失效日期"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="身份证住址" prop="phone">
<el-input
clearable
placeholder="请输入身份证住址"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="人脸照片" prop="businessAddress">
<UploadImg
:limit="30"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl"
:file-list.sync="addOrEditForm.businessLicense"
:is-uploaded="
addOrEditForm.businessLicense.length >= 2
"
/>
</el-form-item>
</el-col>
</el-row>
<TitleTip
titleText="关键信息"
justifyContent="flex-start"
borderBottom="none"
backgroundColor="#f8fafc"
padding="24px 10px"
>
<template>
<span class="tip-text">
(必须填写自动创建用户账号手机号为登录账号)
</span>
</template>
</TitleTip>
<el-row>
<el-col :span="12">
<el-form-item label="入场工程" prop="phone">
<el-input
clearable
placeholder="请输入入场工程"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工种" prop="businessAddress">
<el-input
clearable
placeholder="请输入工种"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="入场分包" prop="phone">
<el-input
clearable
placeholder="请输入入场分包"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" prop="businessAddress">
<el-input
clearable
placeholder="请输入手机号码"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="入场班组" prop="phone">
<el-input
clearable
placeholder="请输入入场班组"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
</el-row>
<TitleTip
titleText="合同见证"
justifyContent="flex-start"
borderBottom="none"
backgroundColor="#f8fafc"
padding="24px 10px"
>
<template>
<span class="tip-text"> (生产工资册之前必须完善) </span>
</template>
</TitleTip>
<el-row>
<el-col :span="24">
<el-form-item label="合同见证照片" prop="businessLicense">
<div style="display: flex; gap: 10px">
<div
class="contract-img-box"
v-for="item in contractImageList"
:key="item.title"
>
<UploadImg
:limit="30"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl"
:file-list.sync="
addOrEditForm.businessLicense
"
:is-uploaded="
addOrEditForm.businessLicense.length >=
2
"
/>
<span> {{ item.title }} </span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="合同编号" prop="phone">
<el-input
clearable
placeholder="请输入合同编号"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同期限类型" prop="businessAddress">
<el-input
clearable
placeholder="请输入合同期限类型"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="合同签订日期" prop="phone">
<el-input
clearable
placeholder="请输入合同签订日期"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同终止日期" prop="businessAddress">
<el-input
clearable
placeholder="请输入合同终止日期"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="工资核定方式" prop="phone">
<el-input
clearable
placeholder="请输入工资核定方式"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工资核定标准" prop="businessAddress">
<el-input
clearable
placeholder="请输入工资核定标准"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="附件" prop="phone">
<el-input
clearable
placeholder="请输入附件"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
</el-row>
<TitleTip
titleText="工资卡见证"
borderBottom="none"
padding="24px 10px"
backgroundColor="#f8fafc"
justifyContent="flex-start"
>
<template>
<span class="tip-text"> (生产工资册之前必须完善) </span>
</template>
</TitleTip>
<el-row>
<el-col :span="24">
<el-form-item label="工资卡见证照片" prop="businessLicense">
<div style="display: flex; gap: 10px">
<div
class="contract-img-box"
v-for="item in bankImageList"
:key="item.title"
>
<UploadImg
:limit="30"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl"
:file-list.sync="
addOrEditForm.businessLicense
"
:is-uploaded="
addOrEditForm.businessLicense.length >=
2
"
/>
<span> {{ item.title }} </span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="银行卡号" prop="phone">
<el-input
clearable
placeholder="请输入银行卡号"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="银行名称" prop="businessAddress">
<el-input
clearable
placeholder="请输入银行名称"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="附件" prop="phone">
<el-input
clearable
placeholder="请输入附件"
v-model="addOrEditForm.phone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="银行支行名称" prop="businessAddress">
<el-input
clearable
placeholder="请输入银行支行名称"
v-model="addOrEditForm.businessAddress"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import UploadImg from '@/components/UploadImg'
import {
addSubBaseInfoAPI,
editSubBaseInfoAPI,
} from '@/api/basic-manage/sub-manage/sub-base-info'
export default {
name: 'AddOrEditForm',
components: {
UploadImg,
},
data() {
return {
formType: 1,
uploadFileUrl:
process.env.VUE_APP_BASE_API + '/system/file/uploadFiles',
addOrEditForm: {
subName: '', //
legalRepresentative: '', //
phone: '', //
businessAddress: '', //
businessLicense: [], //
electronicStamp: [], //
idCard: [], //
electronicSignature: [], // /
},
contractImageList: [
{
title: '人员手持合同照',
imgList: [],
},
{
title: '工作内容页',
imgList: [],
},
{
title: '薪酬约定页',
imgList: [],
},
{
title: '本人签名页',
imgList: [],
},
{
title: '其他照片',
imgList: [],
},
],
bankImageList: [
{
title: '手持银行卡、承诺书',
imgList: [],
},
{
title: '银行卡照片',
imgList: [],
},
{
title: '个人工资卡承诺书',
imgList: [],
},
{
title: '其它照片',
imgList: [],
},
],
addOrEditFormRules: {
subName: [
{
required: true,
message: '请输入分包商名称',
trigger: 'blur',
},
],
legalRepresentative: [
{
required: true,
message: '请输入法定代表人',
trigger: 'blur',
},
],
businessLicense: [
{
required: true,
message: '请上传营业执照',
trigger: 'blur',
},
],
electronicStamp: [
{
required: true,
message: '请上传电子公章',
trigger: 'blur',
},
],
idCard: [
{
required: true,
message: '请上传身份证正反面',
trigger: 'blur',
},
],
electronicSignature: [
{
required: true,
message: '请上传电子签名/法人印章',
trigger: 'blur',
},
],
},
}
},
methods: {
//
onHandleConfirmAddOrEditFun() {
return new Promise((resolve, reject) => {
this.$refs.addOrEditFormRef.validate(async (valid) => {
if (valid) {
console.log(this.addOrEditForm)
const API =
this.formType === 1
? addSubBaseInfoAPI
: editSubBaseInfoAPI
const res = await API(this.addOrEditForm)
console.log(res, '新增或修改结果')
if (res.code === 200) {
resolve()
} else {
reject(new Error(res.message))
}
} else {
reject(new Error('表单验证失败'))
}
})
})
},
//
resetForm() {
this.$refs.addOrEditFormRef.resetFields()
},
},
}
</script>
<style lang="scss" scoped>
@import '@/assets/styles/variables.scss';
.contract-img-box {
display: flex;
align-items: center;
flex-direction: column;
span {
font-size: 14px;
color: $red;
}
}
</style>

View File

@ -56,17 +56,17 @@ export const formLabel = [
] ]
export const columnsList = [ export const columnsList = [
{ t_props: 'projectName', t_label: '姓名' }, { t_props: 'name', t_label: '姓名' },
{ t_props: 'xmb', t_label: '身份证' }, { t_props: 'idNumber', t_label: '身份证' },
{ t_props: 'name', t_label: '所属工程' }, { t_props: 'proName', t_label: '所属工程' },
{ t_props: 'type', t_label: '所属班组' }, { t_props: 'teamName', t_label: '所属班组' },
{ {
t_props: 'businessLicense', t_slot: 'einStatus',
t_label: '出入场状态', t_label: '出入场状态',
}, },
{ t_props: 'idCard', t_label: '入场时间' }, { t_props: 'einTime', t_label: '入场时间' },
{ {
t_props: 'electronicStamp', t_props: 'exitTime',
t_label: '出场时间', t_label: '出场时间',
}, },
{ {
@ -74,7 +74,7 @@ export const columnsList = [
t_label: '离场人员工资结算确认单', t_label: '离场人员工资结算确认单',
}, },
{ {
t_props: 'electronicSignature', t_props: 'subName',
t_label: '所属分包', t_label: '所属分包',
}, },
] ]
@ -82,7 +82,7 @@ export const columnsList = [
export const dialogConfig = { export const dialogConfig = {
outerVisible: false, outerVisible: false,
outerTitle: '', outerTitle: '',
outerWidth: '90%', outerWidth: '50%',
minHeight: '98vh', minHeight: '',
maxHeight: '98vh', maxHeight: '',
} }

View File

@ -0,0 +1,28 @@
<template>
<!-- 出入场记录 -->
<div>
<el-table :data="entryExitRecordList">
<el-table-column label="序号" type="index" width="50" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="idNumber" label="工种" />
<el-table-column prop="proName" label="所属工程" />
<el-table-column prop="teamName" label="所属分包" />
<el-table-column prop="einStatus" label="所属班组" />
<el-table-column prop="einStatus" label="入场时间" />
<el-table-column prop="einStatus" label="出场时间" />
</el-table>
</div>
</template>
<script>
export default {
name: 'EntryExitRecord',
data() {
return {
entryExitRecordList: [],
}
},
}
</script>
<style></style>

View File

@ -35,13 +35,23 @@
</span> </span>
</template> </template>
<template slot="einStatus" slot-scope="{ data }">
<el-tag size="mini" type="success" v-if="data.einStatus === 1">
在场
</el-tag>
<el-tag size="mini" type="danger" v-if="data.einStatus === 2">
出场
</el-tag>
</template>
<template slot="handle" slot-scope="{ data }"> <template slot="handle" slot-scope="{ data }">
<el-button <el-button
plain plain
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-right" icon="el-icon-right"
@click="onHandleAddOrEditAllProject(2, data)" v-if="data.einStatus === 1"
@click="onHandlePersonExit(data)"
> >
出场 出场
</el-button> </el-button>
@ -50,7 +60,7 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-tickets" icon="el-icon-tickets"
@click="onHandleDeleteAllProject(data)" @click="onHandleEntryAndExitRecord(data)"
> >
出入场记录 出入场记录
</el-button> </el-button>
@ -62,7 +72,15 @@
@closeDialogOuter="handleCloseDialogOuter" @closeDialogOuter="handleCloseDialogOuter"
> >
<template slot="outerContent"> <template slot="outerContent">
<AddOrEditForm ref="addOrEditFormContentRef" /> <PersonExitForm
ref="personExitFormRef"
:exitFormData="exitFormData"
v-if="dialogConfig.outerTitle === '人员出场'"
/>
<EntryExitRecord
v-if="dialogConfig.outerTitle === '出入场记录'"
/>
<el-row class="dialog-footer-btn"> <el-row class="dialog-footer-btn">
<el-button size="medium" @click="handleCloseDialogOuter"> <el-button size="medium" @click="handleCloseDialogOuter">
@ -84,7 +102,8 @@
<script> <script>
import TableModel from '@/components/TableModel' import TableModel from '@/components/TableModel'
import DialogModel from '@/components/DialogModel' import DialogModel from '@/components/DialogModel'
import AddOrEditForm from './add-or-edit-form' import PersonExitForm from './person-exit-form.vue'
import EntryExitRecord from './entry-exit-record.vue'
import { formLabel, columnsList, dialogConfig } from './config' import { formLabel, columnsList, dialogConfig } from './config'
import { import {
deleteSubBaseInfoAPI, deleteSubBaseInfoAPI,
@ -97,7 +116,8 @@ export default {
components: { components: {
TableModel, TableModel,
DialogModel, DialogModel,
AddOrEditForm, PersonExitForm,
EntryExitRecord,
}, },
data() { data() {
@ -105,7 +125,7 @@ export default {
formLabel, formLabel,
columnsList, columnsList,
dialogConfig, dialogConfig,
exitFormData: {},
getExitPersonListAPI, getExitPersonListAPI,
slots: { slots: {
@ -134,47 +154,49 @@ export default {
} }
}, },
// onHandlePersonExit(data) {
onHandleAddOrEditAllProject(type, data) { const { name, idNumber, proName, subName, teamName, id, workerId } =
this.dialogConfig.outerTitle = data
type === 1 ? '新增标段工程' : '修改标段工程'
this.dialogConfig.outerVisible = true
},
// this.exitFormData = {
onHandleDeleteAllProject(data) { id,
this.$confirm('确定删除该工程吗?', '温馨提示', { name,
confirmButtonText: '确定', proName,
cancelButtonText: '取消', subName,
type: 'warning', teamName,
}) idNumber,
.then(async () => { workerId,
const res = await deleteSubBaseInfoAPI(data.id) }
console.log(res, '删除结果') this.dialogConfig.outerWidth = ''
if (res.code === 200) { this.dialogConfig.minHeight = ''
this.$msgSuccess('删除成功') this.dialogConfig.maxHeight = ''
this.$refs.personExitTableRef.getTableList() // this.dialogConfig.outerTitle = '人员出场'
} this.dialogConfig.outerVisible = true
})
.catch(() => {
console.log('取消')
})
}, },
// //
async onHandleConfirmAddOrEdit() { async onHandleConfirmAddOrEdit() {
this.$refs.addOrEditFormContentRef.formType =
this.dialogConfig.outerTitle === '新增标段工程' ? 1 : 2
try { try {
await this.$refs.addOrEditFormContentRef.onHandleConfirmAddOrEditFun() await this.$refs.personExitFormRef.onHandleConfirmAddOrEditFun()
this.handleCloseDialogOuter()
this.$refs.personExitTableRef.getTableList() //
} catch (error) { } catch (error) {
console.log('表单提交失败', error) console.log('表单提交失败', error)
} }
}, },
//
onHandleEntryAndExitRecord(data) {
console.log('----')
this.dialogConfig.outerTitle = '出入场记录'
this.dialogConfig.outerWidth = '80%'
this.dialogConfig.minHeight = '90vh'
this.dialogConfig.maxHeight = '90vh'
this.dialogConfig.outerVisible = true
},
// //
handleCloseDialogOuter() { handleCloseDialogOuter() {
this.$refs.addOrEditFormContentRef.resetForm()
this.dialogConfig.outerVisible = false this.dialogConfig.outerVisible = false
}, },
}, },

View File

@ -0,0 +1,173 @@
<template>
<!-- 新增或修改标段工程表单 -->
<div>
<el-form
label-width="140px"
ref="addOrEditFormRef"
:model="personExitFormData"
>
<el-row>
<el-col :span="24">
<el-form-item label="姓名">
<el-input disabled v-model="personExitFormData.name" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="身份证号">
<el-input
disabled
v-model="personExitFormData.idNumber"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工程名称">
<el-input
disabled
v-model="personExitFormData.proName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包商名称">
<el-input
disabled
v-model="personExitFormData.subName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="班组名称">
<el-input
disabled
v-model="personExitFormData.teamName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="离场工资结算确认单">
<UploadFileFormData
:limit="3"
:file-size="20"
:multiple="true"
:file-list.sync="personExitFormData.fileList"
uploadTip="可上传多张,离场工资结算单,人员手持结算单照片"
:file-type="[
'jpg',
'png',
'jpeg',
'pdf',
'doc',
'docx',
]"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import UploadFileFormData from '@/components/UploadFileFormData'
import { addEntryPersonAPI } from '@/api/construction-person/entry-and-exit-manage/person-exit'
export default {
name: 'personExitForm',
components: {
UploadFileFormData,
},
props: {
exitFormData: {
type: Object,
default: () => {},
},
},
data() {
return {
personExitFormData: {
id: '',
name: '',
idNumber: '',
proName: '',
subName: '',
teamName: '',
fileList: [],
},
}
},
methods: {
//
onHandleConfirmAddOrEditFun() {
return new Promise(async (resolve, reject) => {
const { id, workerId, fileList } = this.personExitFormData
const params = {
id,
workerId,
}
const formData = new FormData()
const fileMsg = []
if (fileList.length > 0) {
fileList.forEach((e) => {
formData.append('files', e.raw)
fileMsg.push({
name: '工资结算确认单',
type: 1,
})
})
}
formData.append('params', JSON.stringify(params))
formData.append('fileMsg', JSON.stringify(fileMsg))
const res = await addEntryPersonAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('出场成功')
resolve()
} else {
this.$modal.msgError(res.msg)
reject(new Error(res.msg))
}
})
},
},
watch: {
exitFormData: {
handler(newVal) {
if (Object.keys(newVal).length > 0) {
Object.assign(this.personExitFormData, newVal)
}
},
deep: true,
immediate: true,
},
},
}
</script>
<style lang="scss" scoped>
@import '@/assets/styles/variables.scss';
.contract-img-box {
display: flex;
align-items: center;
flex-direction: column;
span {
font-size: 14px;
color: $red;
}
}
</style>