考勤机页面完善
This commit is contained in:
parent
70c4287051
commit
3e39d0b85f
|
|
@ -49,3 +49,10 @@ export const getTeamSelectListAPI = () => {
|
|||
method: 'GET',
|
||||
})
|
||||
}
|
||||
// 获取工种下拉列表
|
||||
export const getPostTypeSelectListAPI = () => {
|
||||
return request({
|
||||
url: '/bmw/postType/listAll',
|
||||
method: 'GET',
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
import request from '@/utils/request'
|
||||
import requestFormData from '@/utils/request_formdata'
|
||||
|
||||
// 新增考勤机
|
||||
export const addAttendanceMachineAPI = (data) => {
|
||||
return request({
|
||||
url: '/bmw/pmAttDevice/addPmAttDevice',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
// 修改考勤机
|
||||
export const editAttendanceMachineAPI = (data) => {
|
||||
return request({
|
||||
url: '/bmw/pmAttDevice/updatePmAttDevice',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
// 删除考勤机
|
||||
export const deleteAttendanceMachineAPI = (data) => {
|
||||
return request({
|
||||
url: '/bmw/pmAttDevice/delPmAttDevice',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
// 获取考勤机列表
|
||||
export const getAttendanceMachineListAPI = (data) => {
|
||||
return request({
|
||||
url: '/bmw/pmAttDevice/list',
|
||||
method: 'GET',
|
||||
params: data,
|
||||
})
|
||||
}
|
||||
|
|
@ -10,6 +10,32 @@ export const addEntryPersonAPI = (data) => {
|
|||
})
|
||||
}
|
||||
|
||||
// 人员出场 批量出场
|
||||
export const batchExitPersonAPI = (data) => {
|
||||
return requestFormData({
|
||||
url: '/bmw/workerExit/exit/batchExit',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
// 获取人员出入场记录记录
|
||||
export const getPersonEntryAndExitRecordAPI = (data) => {
|
||||
return requestFormData({
|
||||
url: '/bmw/workerExit/workerList',
|
||||
method: 'GET',
|
||||
params: data,
|
||||
})
|
||||
}
|
||||
// 已出场且未上传工资单 然后单独上传接口
|
||||
export const uploadExitFileAPI = (data) => {
|
||||
return requestFormData({
|
||||
url: '/bmw/workerExit/exitFile',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
// 人员出场 删除人员接口
|
||||
export const deleteEntryPersonAPI = (data) => {
|
||||
return request({
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ const common = {
|
|||
subSelectList: [],
|
||||
// 班组下拉列表
|
||||
teamSelectList: [],
|
||||
// 工种下拉列表
|
||||
postTypeSelectList: [],
|
||||
},
|
||||
mutations: {
|
||||
SET_COMPANY_SELECT_LIST(state, companySelectList) {
|
||||
|
|
@ -32,6 +34,9 @@ const common = {
|
|||
SET_TEAM_SELECT_LIST(state, teamSelectList) {
|
||||
state.teamSelectList = teamSelectList
|
||||
},
|
||||
SET_POST_TYPE_SELECT_LIST(state, postTypeSelectList) {
|
||||
state.postTypeSelectList = postTypeSelectList
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import {
|
|||
getLotProjectSelectListAPI,
|
||||
getSubSelectListAPI,
|
||||
getTeamSelectListAPI,
|
||||
getPostTypeSelectListAPI,
|
||||
} from '@/api/common'
|
||||
|
||||
// 获取公司下拉列表
|
||||
|
|
@ -90,3 +91,16 @@ export async function getTeamSelectListCommonFun() {
|
|||
}
|
||||
return []
|
||||
}
|
||||
// 获取工种下拉列表
|
||||
export async function getPostTypeSelectListCommonFun() {
|
||||
const { postTypeSelectList } = store.state.common
|
||||
if (postTypeSelectList.length > 0) {
|
||||
return postTypeSelectList
|
||||
}
|
||||
const res = await getPostTypeSelectListAPI()
|
||||
if (res.code === 200) {
|
||||
store.commit('SET_POST_TYPE_SELECT_LIST', res.rows)
|
||||
return res.rows
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,182 @@
|
|||
<template>
|
||||
<!-- 新增或修改标段工程表单 -->
|
||||
<div>
|
||||
<el-form
|
||||
label-width="140px"
|
||||
ref="addOrEditFormRef"
|
||||
:model="addOrEditForm"
|
||||
:rules="addOrEditFormRules"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="考勤机编码" prop="deviceCode">
|
||||
<el-input
|
||||
clearable
|
||||
maxlength="30"
|
||||
show-word-limit
|
||||
placeholder="请输入考勤机编码"
|
||||
v-model="addOrEditForm.deviceCode"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="考勤机名称" prop="deviceName">
|
||||
<el-input
|
||||
clearable
|
||||
maxlength="30"
|
||||
show-word-limit
|
||||
placeholder="请输入考勤机名称"
|
||||
v-model="addOrEditForm.deviceName"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工程名称" prop="proId">
|
||||
<el-select
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择"
|
||||
v-model="addOrEditForm.proId"
|
||||
>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in lotProjectList"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import UploadImgFormData from '@/components/UploadImgFormData'
|
||||
import {
|
||||
addAttendanceMachineAPI,
|
||||
editAttendanceMachineAPI,
|
||||
} from '@/api/construction-person/attendance-manage/attendance-machine'
|
||||
|
||||
import { getLotProjectSelectListCommonFun } from '@/utils/getCommonData'
|
||||
export default {
|
||||
name: 'AddOrEditForm',
|
||||
components: {
|
||||
UploadImgFormData,
|
||||
},
|
||||
props: {
|
||||
// 修改时回显的数据
|
||||
editFormData: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
addOrEditForm: {
|
||||
proId: '',
|
||||
isUpdate: false,
|
||||
deviceCode: '',
|
||||
deviceName: '',
|
||||
},
|
||||
addOrEditFormRules: {
|
||||
deviceCode: [
|
||||
{
|
||||
required: true,
|
||||
trigger: 'blur',
|
||||
message: '请输入考勤机编码',
|
||||
},
|
||||
],
|
||||
|
||||
deviceName: [
|
||||
{
|
||||
required: true,
|
||||
trigger: 'blur',
|
||||
message: '请输入考勤机名称',
|
||||
},
|
||||
],
|
||||
|
||||
proId: [
|
||||
{
|
||||
required: true,
|
||||
trigger: 'blur',
|
||||
message: '请选择工程',
|
||||
},
|
||||
],
|
||||
},
|
||||
lotProjectList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 确定按钮
|
||||
onHandleConfirmAddOrEditFun() {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.$refs.addOrEditFormRef.validate(async (valid) => {
|
||||
if (valid) {
|
||||
// 组装参数
|
||||
const { isUpdate, proId, deviceCode, deviceName } =
|
||||
this.addOrEditForm
|
||||
|
||||
const params = {
|
||||
proId,
|
||||
deviceCode,
|
||||
deviceName,
|
||||
}
|
||||
|
||||
const API = isUpdate
|
||||
? editAttendanceMachineAPI
|
||||
: addAttendanceMachineAPI
|
||||
|
||||
const res = await API(params)
|
||||
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess(
|
||||
this.formType === 1 ? '新增成功' : '修改成功',
|
||||
)
|
||||
resolve()
|
||||
} else {
|
||||
this.$modal.msgError(res.meg)
|
||||
reject(new Error(res.meg))
|
||||
}
|
||||
} else {
|
||||
reject(new Error('表单验证失败'))
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 重置表单
|
||||
resetForm() {
|
||||
this.$refs.addOrEditFormRef.resetFields()
|
||||
},
|
||||
},
|
||||
|
||||
async created() {
|
||||
const lotPro = await getLotProjectSelectListCommonFun()
|
||||
this.lotProjectList = lotPro.map((item) => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.proName,
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
watch: {
|
||||
editFormData: {
|
||||
handler(newVal) {
|
||||
if (Object.keys(newVal).length > 0) {
|
||||
Object.assign(this.addOrEditForm, newVal)
|
||||
}
|
||||
},
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
export const formLabel = [
|
||||
{
|
||||
isShow: false, // 是否展示label
|
||||
f_type: 'ipt',
|
||||
f_label: '考勤机编号',
|
||||
f_model: 'deviceCode',
|
||||
},
|
||||
{
|
||||
isShow: false, // 是否展示label
|
||||
f_type: 'ipt',
|
||||
f_label: '考勤机名称',
|
||||
f_model: 'deviceName',
|
||||
},
|
||||
{
|
||||
isShow: false, // 是否展示label
|
||||
f_type: 'ipt',
|
||||
f_label: '所属工程',
|
||||
f_model: 'proName',
|
||||
},
|
||||
{
|
||||
isShow: false, // 是否展示label
|
||||
f_type: 'sel',
|
||||
f_label: '考勤机状态',
|
||||
f_model: 'onLine',
|
||||
f_selList: [
|
||||
{
|
||||
label: '在线',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '离线',
|
||||
value: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export const columnsList = [
|
||||
{ t_props: 'deviceCode', t_label: '考勤机编号' },
|
||||
{ t_props: 'deviceName', t_label: '考勤机名称' },
|
||||
{ t_props: 'proName', t_label: '工程名称' },
|
||||
{ t_slot: 'isShanghai', t_label: '工程类型' },
|
||||
{
|
||||
t_label: '状态',
|
||||
t_slot: 'onLine',
|
||||
},
|
||||
{ t_label: '绑定人', t_props: 'updateUser' },
|
||||
{
|
||||
t_label: '绑定时间',
|
||||
t_props: 'updateTime',
|
||||
},
|
||||
]
|
||||
|
||||
export const dialogConfig = {
|
||||
outerTitle: '',
|
||||
minHeight: '',
|
||||
maxHeight: '',
|
||||
outerWidth: '40%',
|
||||
outerVisible: false,
|
||||
}
|
||||
|
|
@ -1,11 +1,264 @@
|
|||
<template>
|
||||
<!-- 施工人员 ---- 考勤管理 ---- 考勤机 -->
|
||||
<div class="app-container">
|
||||
<h1>考勤机</h1>
|
||||
<TableModel
|
||||
:formLabel="formLabel"
|
||||
:showOperation="true"
|
||||
:showRightTools="true"
|
||||
ref="attendanceMachineTableRef"
|
||||
:columnsList="columnsList"
|
||||
:request-api="getAttendanceMachineListAPI"
|
||||
>
|
||||
<template slot="btn" slot-scope="{ queryParams }">
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="success"
|
||||
icon="el-icon-download"
|
||||
@click="onHandleExportAttendanceMachine(queryParams)"
|
||||
>
|
||||
导出
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="primary"
|
||||
icon="el-icon-plus"
|
||||
v-hasPermi="['attendance:machine:add']"
|
||||
@click="onHandleAddOrBindAttendanceMachine(1, null)"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
<!-- 工程类型-->
|
||||
<template slot="isShanghai" slot-scope="{ data }">
|
||||
<span
|
||||
:style="{
|
||||
color: data.isShanghai == 1 ? '#67C23A' : '#F56C6C',
|
||||
}"
|
||||
>
|
||||
{{ data.isShanghai == 1 ? '上海内' : '上海外' }}
|
||||
</span>
|
||||
</template>
|
||||
<template slot="onLine" slot-scope="{ data }">
|
||||
<el-tag
|
||||
size="mini"
|
||||
:type="data.onLine == 1 ? 'success' : 'danger'"
|
||||
>
|
||||
{{ data.onLine == 1 ? '在线' : '离线' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<template slot="handle" slot-scope="{ data }">
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="primary"
|
||||
icon="el-icon-edit"
|
||||
v-if="data.onLine != 1"
|
||||
v-hasPermi="['attendance:machine:bind']"
|
||||
@click="onHandleAddOrBindAttendanceMachine(2, data)"
|
||||
>
|
||||
绑定
|
||||
</el-button>
|
||||
<el-button
|
||||
plain
|
||||
size="mini"
|
||||
type="warning"
|
||||
icon="el-icon-edit"
|
||||
v-hasPermi="['attendance:machine:unbind']"
|
||||
@click="onHandleUnBindAttendanceMachine(data)"
|
||||
>
|
||||
解绑
|
||||
</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
v-hasPermi="['attendance:machine:delete']"
|
||||
@click="onHandleDeleteSubBaseInfo(data)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</TableModel>
|
||||
|
||||
<DialogModel
|
||||
:dialogConfig="dialogConfig"
|
||||
@closeDialogOuter="handleCloseDialogOuter"
|
||||
>
|
||||
<template slot="outerContent">
|
||||
<AddAndBindForm
|
||||
:editFormData="editFormData"
|
||||
ref="addOrEditSubBaseInfoRef"
|
||||
/>
|
||||
<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>
|
||||
</DialogModel>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {}
|
||||
</script>
|
||||
import TableModel from '@/components/TableModel'
|
||||
import DialogModel from '@/components/DialogModel'
|
||||
import AddAndBindForm from './add-and-bind.form.vue'
|
||||
import { formLabel, columnsList, dialogConfig } from './config'
|
||||
import {
|
||||
deleteAttendanceMachineAPI,
|
||||
getAttendanceMachineListAPI,
|
||||
editAttendanceMachineAPI,
|
||||
} from '@/api/construction-person/attendance-manage/attendance-machine'
|
||||
export default {
|
||||
name: 'SubBaseInfo',
|
||||
components: {
|
||||
TableModel,
|
||||
DialogModel,
|
||||
AddAndBindForm,
|
||||
},
|
||||
|
||||
<style></style>
|
||||
data() {
|
||||
return {
|
||||
formLabel,
|
||||
columnsList,
|
||||
dialogConfig,
|
||||
editFormData: {}, // 修改时回显的数据
|
||||
getAttendanceMachineListAPI, // 获取分包商列表的API
|
||||
|
||||
// 营业执照身份证等信息是否上传的插槽
|
||||
slots: [
|
||||
{
|
||||
type: 1,
|
||||
name: 'businessLicense',
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'idCard',
|
||||
},
|
||||
{
|
||||
type: 3,
|
||||
name: 'electronicSeal',
|
||||
},
|
||||
{
|
||||
type: 4,
|
||||
name: 'corporateSeal',
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 导出按钮
|
||||
onHandleExportAttendanceMachine(queryParams) {
|
||||
this.download(
|
||||
'/bmw/pmAttDevice/export',
|
||||
{
|
||||
...queryParams,
|
||||
},
|
||||
`考勤机列表.xlsx`,
|
||||
)
|
||||
},
|
||||
|
||||
// 新增或修改
|
||||
onHandleAddOrBindAttendanceMachine(type, data) {
|
||||
this.dialogConfig.outerTitle =
|
||||
type === 1 ? '新增考勤机' : '绑定考勤机'
|
||||
|
||||
if (type === 2) {
|
||||
const { proId, deviceCode, deviceName } = data
|
||||
|
||||
this.editFormData = {
|
||||
isUpdate: true,
|
||||
proId,
|
||||
deviceCode,
|
||||
deviceName,
|
||||
}
|
||||
} else {
|
||||
this.editFormData = {}
|
||||
}
|
||||
this.dialogConfig.outerVisible = true
|
||||
},
|
||||
|
||||
// 解绑
|
||||
onHandleUnBindAttendanceMachine(data) {
|
||||
this.$confirm('是否确定解绑该考勤机?', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
const res = await editAttendanceMachineAPI({
|
||||
deviceCode: data.deviceCode,
|
||||
})
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess('解绑成功')
|
||||
this.$refs.attendanceMachineTableRef.getTableList() // 更新列表
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// console.log('取消')
|
||||
})
|
||||
},
|
||||
|
||||
// 删除
|
||||
onHandleDeleteSubBaseInfo(data) {
|
||||
this.$confirm('确定删除该考勤机吗?', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
const res = await deleteAttendanceMachineAPI({
|
||||
deviceCode: data.deviceCode,
|
||||
})
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess('删除成功')
|
||||
this.$refs.attendanceMachineTableRef.getTableList() // 更新列表
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// console.log('取消')
|
||||
})
|
||||
},
|
||||
|
||||
// 确定按钮
|
||||
async onHandleConfirmAddOrEdit() {
|
||||
try {
|
||||
await this.$refs.addOrEditSubBaseInfoRef.onHandleConfirmAddOrEditFun()
|
||||
this.handleCloseDialogOuter()
|
||||
this.$refs.attendanceMachineTableRef.getTableList()
|
||||
} catch (error) {
|
||||
// console.log('表单提交失败', error)
|
||||
}
|
||||
},
|
||||
|
||||
// 关闭弹框
|
||||
handleCloseDialogOuter() {
|
||||
this.$refs.addOrEditSubBaseInfoRef.resetForm()
|
||||
this.dialogConfig.outerVisible = false
|
||||
},
|
||||
|
||||
// 初始化是否上传
|
||||
initIsUpload(data, type) {
|
||||
if (data.contractFile.length > 0) {
|
||||
const isUpload = data.contractFile.some(
|
||||
(item) => item.sourceType == type,
|
||||
)
|
||||
return isUpload ? '已上传' : '未上传'
|
||||
}
|
||||
return '未上传'
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -187,8 +187,8 @@ export default {
|
|||
async onHandleConfirmAddOrEdit() {
|
||||
try {
|
||||
await this.$refs.addOrEditFormContentRef.onHandleConfirmAddOrEditFun()
|
||||
// this.$refs.personEntryTableRef.getTableList()
|
||||
// this.handleCloseDialogOuter()
|
||||
this.$refs.personEntryTableRef.getTableList()
|
||||
this.handleCloseDialogOuter()
|
||||
} catch (error) {
|
||||
console.log('表单提交失败', error)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,57 +1,81 @@
|
|||
export const formLabel = [
|
||||
{
|
||||
f_label: '关键词',
|
||||
f_model: 'keyword',
|
||||
f_label: '姓名',
|
||||
f_model: 'name',
|
||||
f_type: 'ipt',
|
||||
isShow: false, // 是否展示label
|
||||
},
|
||||
{
|
||||
f_label: '身份证',
|
||||
f_model: 'keyword',
|
||||
f_model: 'idNumber',
|
||||
f_type: 'ipt',
|
||||
isShow: false, // 是否展示label
|
||||
},
|
||||
{
|
||||
f_label: '联系方式',
|
||||
f_model: 'keyword',
|
||||
f_model: 'phone',
|
||||
f_type: 'ipt',
|
||||
isShow: false, // 是否展示label
|
||||
},
|
||||
{
|
||||
f_label: '选择工程',
|
||||
f_model: 'keyword',
|
||||
f_type: 'ipt',
|
||||
f_model: 'proId',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [],
|
||||
},
|
||||
{
|
||||
f_label: '选择工种',
|
||||
f_model: 'keyword',
|
||||
f_type: 'ipt',
|
||||
f_model: 'postId',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [],
|
||||
},
|
||||
{
|
||||
f_label: '选择分包',
|
||||
f_model: 'keyword',
|
||||
f_type: 'ipt',
|
||||
f_model: 'subId',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [],
|
||||
},
|
||||
{
|
||||
f_label: '选择班组',
|
||||
f_model: 'keyword',
|
||||
f_type: 'ipt',
|
||||
f_model: 'teamId',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [],
|
||||
},
|
||||
{
|
||||
f_label: '出入场状态',
|
||||
f_model: 'keyword',
|
||||
f_type: 'ipt',
|
||||
f_model: 'einStatus',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [
|
||||
{
|
||||
label: '在场',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '出场',
|
||||
value: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
f_label: '结算单状态',
|
||||
f_model: 'keyword',
|
||||
f_type: 'ipt',
|
||||
f_model: 'isUploadFile',
|
||||
f_type: 'sel',
|
||||
isShow: false, // 是否展示label
|
||||
f_selList: [
|
||||
{
|
||||
label: '未上传',
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
label: '已上传',
|
||||
value: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
|
|
@ -70,8 +94,9 @@ export const columnsList = [
|
|||
t_label: '出场时间',
|
||||
},
|
||||
{
|
||||
t_props: 'electronicSignature',
|
||||
t_slot: 'isUploadFile',
|
||||
t_label: '离场人员工资结算确认单',
|
||||
t_width: '200px',
|
||||
},
|
||||
{
|
||||
t_props: 'subName',
|
||||
|
|
|
|||
|
|
@ -2,26 +2,118 @@
|
|||
<!-- 出入场记录 -->
|
||||
<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-column
|
||||
align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="50"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="name"
|
||||
label="姓名"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="postName"
|
||||
label="工种"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="proName"
|
||||
label="所属工程"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="subName"
|
||||
label="所属分包"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="teamName"
|
||||
label="所属班组"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="einTime"
|
||||
label="入场时间"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="endTime"
|
||||
label="出场时间"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
label="离场人员工资结算确认单"
|
||||
>
|
||||
<template slot-scope="{ row }">
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="onHandlePreviewFile(row)"
|
||||
>
|
||||
3
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getPersonEntryAndExitRecordAPI } from '@/api/construction-person/entry-and-exit-manage/person-exit'
|
||||
export default {
|
||||
name: 'EntryExitRecord',
|
||||
props: {
|
||||
queryDetailsId: {
|
||||
type: [String, Number],
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
entryExitRecordList: [],
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 获取出入场记录列表
|
||||
async getPersonEntryAndExitRecordList() {
|
||||
const res = await getPersonEntryAndExitRecordAPI({
|
||||
id: this.queryDetailsId,
|
||||
})
|
||||
this.entryExitRecordList = res.rows
|
||||
},
|
||||
|
||||
// 查看附件
|
||||
|
||||
onHandlePreviewFile(row) {
|
||||
console.log(row, '查看附件')
|
||||
},
|
||||
},
|
||||
|
||||
watch: {
|
||||
queryDetailsId: {
|
||||
handler(newVal) {
|
||||
if (newVal) {
|
||||
this.getPersonEntryAndExitRecordList()
|
||||
}
|
||||
},
|
||||
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
:isSelectShow="true"
|
||||
ref="personExitTableRef"
|
||||
:columnsList="columnsList"
|
||||
:selectable="(row) => row.einStatus === 1"
|
||||
:request-api="getExitPersonListAPI"
|
||||
>
|
||||
<template slot="btn" slot-scope="{ queryParams }">
|
||||
|
|
@ -43,6 +44,36 @@
|
|||
出场
|
||||
</el-tag>
|
||||
</template>
|
||||
<template slot="isUploadFile" slot-scope="{ data }">
|
||||
<el-tag size="mini" type="danger" v-if="data.isUploadFile == 0">
|
||||
未上传
|
||||
{{
|
||||
data.daysSinceExit * 1 > 0
|
||||
? '(' + data.daysSinceExit + '天)'
|
||||
: ''
|
||||
}}
|
||||
</el-tag>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
style="margin-left: 5px"
|
||||
@click="onHandlePersonExit(data, 2)"
|
||||
v-if="
|
||||
data.isUploadFile == 0 &&
|
||||
data.einStatus === 2 &&
|
||||
data.daysSinceExit * 1 < 31
|
||||
"
|
||||
>
|
||||
点击上传
|
||||
</el-button>
|
||||
<el-tag
|
||||
size="mini"
|
||||
type="success"
|
||||
v-if="data.isUploadFile == 1"
|
||||
>
|
||||
已上传
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<template slot="handle" slot-scope="{ data }">
|
||||
<el-button
|
||||
|
|
@ -51,7 +82,7 @@
|
|||
type="primary"
|
||||
icon="el-icon-right"
|
||||
v-if="data.einStatus === 1"
|
||||
@click="onHandlePersonExit(data)"
|
||||
@click="onHandlePersonExit(data, 1)"
|
||||
>
|
||||
出场
|
||||
</el-button>
|
||||
|
|
@ -75,14 +106,19 @@
|
|||
<PersonExitForm
|
||||
ref="personExitFormRef"
|
||||
:exitFormData="exitFormData"
|
||||
:isExitUpload="isExitUpload"
|
||||
v-if="dialogConfig.outerTitle === '人员出场'"
|
||||
/>
|
||||
|
||||
<EntryExitRecord
|
||||
:queryDetailsId="queryDetailsId"
|
||||
v-if="dialogConfig.outerTitle === '出入场记录'"
|
||||
/>
|
||||
|
||||
<el-row class="dialog-footer-btn">
|
||||
<el-row
|
||||
class="dialog-footer-btn"
|
||||
v-if="dialogConfig.outerTitle === '人员出场'"
|
||||
>
|
||||
<el-button size="medium" @click="handleCloseDialogOuter">
|
||||
取消
|
||||
</el-button>
|
||||
|
|
@ -104,15 +140,21 @@ import TableModel from '@/components/TableModel'
|
|||
import DialogModel from '@/components/DialogModel'
|
||||
import PersonExitForm from './person-exit-form.vue'
|
||||
import EntryExitRecord from './entry-exit-record.vue'
|
||||
import { formLabel, columnsList, dialogConfig } from './config'
|
||||
import {
|
||||
deleteSubBaseInfoAPI,
|
||||
getSubBaseInfoListAPI,
|
||||
} from '@/api/basic-manage/sub-manage/sub-base-info'
|
||||
getLotProjectSelectListCommonFun,
|
||||
getSubSelectListCommonFun,
|
||||
getTeamSelectListCommonFun,
|
||||
getPostTypeSelectListCommonFun,
|
||||
} from '@/utils/getCommonData'
|
||||
import { formLabel, columnsList, dialogConfig } from './config'
|
||||
|
||||
import { getExitPersonListAPI } from '@/api/construction-person/entry-and-exit-manage/person-exit'
|
||||
import {
|
||||
getExitPersonListAPI,
|
||||
batchExitPersonAPI,
|
||||
} from '@/api/construction-person/entry-and-exit-manage/person-exit'
|
||||
export default {
|
||||
name: 'PersonExit',
|
||||
dicts: ['project_type'],
|
||||
components: {
|
||||
TableModel,
|
||||
DialogModel,
|
||||
|
|
@ -126,6 +168,8 @@ export default {
|
|||
columnsList,
|
||||
dialogConfig,
|
||||
exitFormData: {},
|
||||
queryDetailsId: '',
|
||||
isExitUpload: 1, // 是否出场 后上传文件
|
||||
getExitPersonListAPI,
|
||||
|
||||
slots: {
|
||||
|
|
@ -143,7 +187,7 @@ export default {
|
|||
},
|
||||
|
||||
// 批量出场
|
||||
onHandleBatchExit() {
|
||||
async onHandleBatchExit() {
|
||||
console.log(this.$refs.personExitTableRef.selectedData, '批量出场')
|
||||
|
||||
const selectedData = this.$refs.personExitTableRef.selectedData
|
||||
|
|
@ -152,9 +196,27 @@ export default {
|
|||
this.$message.warning('请勾选要出场的人员')
|
||||
return
|
||||
}
|
||||
|
||||
const params = selectedData.map((item) => {
|
||||
return {
|
||||
id: item.id,
|
||||
workerId: item.workerId,
|
||||
}
|
||||
})
|
||||
const res = await batchExitPersonAPI(params)
|
||||
|
||||
console.log(res, '批量出场结果')
|
||||
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess('批量出场成功')
|
||||
this.$refs.personExitTableRef.getTableList()
|
||||
} else {
|
||||
this.$modal.msgError(res.msg)
|
||||
}
|
||||
},
|
||||
|
||||
onHandlePersonExit(data) {
|
||||
onHandlePersonExit(data, type) {
|
||||
this.isExitUpload = type
|
||||
const { name, idNumber, proName, subName, teamName, id, workerId } =
|
||||
data
|
||||
|
||||
|
|
@ -187,7 +249,7 @@ export default {
|
|||
|
||||
// 出入场记录
|
||||
onHandleEntryAndExitRecord(data) {
|
||||
console.log('----')
|
||||
this.queryDetailsId = data.id
|
||||
this.dialogConfig.outerTitle = '出入场记录'
|
||||
this.dialogConfig.outerWidth = '80%'
|
||||
this.dialogConfig.minHeight = '90vh'
|
||||
|
|
@ -200,5 +262,37 @@ export default {
|
|||
this.dialogConfig.outerVisible = false
|
||||
},
|
||||
},
|
||||
|
||||
async created() {
|
||||
const lotProjectList = await getLotProjectSelectListCommonFun()
|
||||
const subList = await getSubSelectListCommonFun()
|
||||
const teamList = await getTeamSelectListCommonFun()
|
||||
const postTypeList = await getPostTypeSelectListCommonFun()
|
||||
|
||||
this.formLabel[3].f_selList = lotProjectList.map((item) => {
|
||||
return {
|
||||
label: item.proName,
|
||||
value: item.id,
|
||||
}
|
||||
})
|
||||
this.formLabel[4].f_selList = postTypeList.map((item) => {
|
||||
return {
|
||||
label: item.postName,
|
||||
value: item.postId,
|
||||
}
|
||||
})
|
||||
this.formLabel[5].f_selList = subList.map((item) => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.subName,
|
||||
}
|
||||
})
|
||||
this.formLabel[6].f_selList = teamList.map((item) => {
|
||||
return {
|
||||
value: item.id,
|
||||
label: item.teamName,
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -81,7 +81,10 @@
|
|||
|
||||
<script>
|
||||
import UploadFileFormData from '@/components/UploadFileFormData'
|
||||
import { addEntryPersonAPI } from '@/api/construction-person/entry-and-exit-manage/person-exit'
|
||||
import {
|
||||
addEntryPersonAPI,
|
||||
uploadExitFileAPI,
|
||||
} from '@/api/construction-person/entry-and-exit-manage/person-exit'
|
||||
export default {
|
||||
name: 'personExitForm',
|
||||
components: {
|
||||
|
|
@ -92,6 +95,10 @@ export default {
|
|||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
isExitUpload: {
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -110,6 +117,7 @@ export default {
|
|||
// 确定按钮
|
||||
onHandleConfirmAddOrEditFun() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
if (this.isExitUpload === 1) {
|
||||
const { id, workerId, fileList } = this.personExitFormData
|
||||
const params = {
|
||||
id,
|
||||
|
|
@ -140,6 +148,37 @@ export default {
|
|||
this.$modal.msgError(res.msg)
|
||||
reject(new Error(res.msg))
|
||||
}
|
||||
} else {
|
||||
const { id, fileList } = this.personExitFormData
|
||||
const params = {
|
||||
id,
|
||||
}
|
||||
|
||||
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 uploadExitFileAPI(formData)
|
||||
|
||||
if (res.code === 200) {
|
||||
this.$modal.msgSuccess('上传成功')
|
||||
resolve()
|
||||
} else {
|
||||
this.$modal.msgError(res.msg)
|
||||
reject(new Error(res.msg))
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue