三表一册接口调试完成

This commit is contained in:
BianLzhaoMin 2025-09-29 14:48:51 +08:00
parent 79607cc494
commit 87c90c3fbf
12 changed files with 228 additions and 56 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -92,3 +92,14 @@ export const getTeamSelectListByConditionAPI = (data) => {
data, data,
}) })
} }
// 删除附件
export const deleteFileAPI = (id) => {
return request({
url: '/bmw/pmProject/updateRefundFileById/' + id,
method: 'POST',
data: {
id: id,
},
})
}

View File

@ -90,3 +90,12 @@ export const uploadProMonthTableRefundAPI = (data) => {
data, data,
}) })
} }
// 综合查询 三表一册 农名工工资支付表 保存操作
export const saveThreeAndOneMonthlyWagePaymentAPI = (data) => {
return request({
url: '/bmw/pmProject/updateSalary',
method: 'POST',
data,
})
}

View File

@ -246,6 +246,7 @@ export function tansParams(params, isEncrypt = false) {
// result = result.slice(0, -1) // result = result.slice(0, -1)
result = encryptWithSM4(result) result = encryptWithSM4(result)
} }
return result return result
} }

View File

@ -75,8 +75,9 @@ export default {
0, 0,
) )
const percent = ( const percent = (
(dataItem.value / total) * isNaN((dataItem.value / total) * 100)
100 ? 0
: (dataItem.value / total) * 100
).toFixed(1) ).toFixed(1)
if (data.showAfter) { if (data.showAfter) {

View File

@ -265,7 +265,7 @@ export default {
return { return {
fontSize: '14px', fontSize: '14px',
color: '#606266', color: '#606266',
padding: '12px 8px', padding: '12px 0',
} }
}, },
@ -307,6 +307,11 @@ export default {
// //
onHandleDownloadFile(row) { onHandleDownloadFile(row) {
console.log('row', row) console.log('row', row)
this.download(
'/bmw/pmProject/exportThreeAndOne',
{},
'三表一册.xlsx',
)
}, },
// //

View File

@ -11,14 +11,16 @@
> >
<el-form-item prop="subName"> <el-form-item prop="subName">
<el-input <el-input
v-model="attDetailsQueryParams.subName" clearable
placeholder="请输入分包" placeholder="请输入分包"
v-model.trim="attDetailsQueryParams.subName"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="userName"> <el-form-item prop="userName">
<el-input <el-input
v-model="attDetailsQueryParams.userName" clearable
placeholder="请输入姓名" placeholder="请输入姓名"
v-model.trim="attDetailsQueryParams.userName"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -53,8 +55,8 @@
<el-form-item <el-form-item
style="flex: 1; text-align: right; color: #ef4444" style="flex: 1; text-align: right; color: #ef4444"
> >
<span>出勤1</span> <span>出勤1 &nbsp;&nbsp;</span>
<span>缺勤0</span> <span>缺勤0 &nbsp;&nbsp;</span>
<span>无对应日期空白</span> <span>无对应日期空白</span>
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@ -12,7 +12,7 @@
size="mini" size="mini"
type="danger" type="danger"
@click="onHandlePack" @click="onHandlePack"
:disabled="monthlyData.refundStatus == 1" :disabled="monthlyData.status == 2"
> >
封档 封档
</el-button> </el-button>
@ -32,9 +32,9 @@
<div class="label-list"> <div class="label-list">
<div class="left"> <div class="left">
<div <div
:key="index"
class="label-item" class="label-item"
:key="item.label" v-for="(item, index) in labelList"
v-for="item in labelList"
> >
<span class="label-label">{{ item.label }}</span> <span class="label-label">{{ item.label }}</span>
<span class="label-value"> <span class="label-value">
@ -60,18 +60,14 @@
<el-tag <el-tag
size="mini" size="mini"
type="warning" type="warning"
v-if=" v-if="monthlyData.status == 1"
monthlyData.refundStatus == 0 ||
monthlyData.refundStatus == null ||
monthlyData.refundStatus == 1
"
> >
待封档 待封档
</el-tag> </el-tag>
<el-tag <el-tag
size="mini" size="mini"
type="success" type="success"
v-if="monthlyData.refundStatus == 2" v-if="monthlyData.status == 2"
> >
已封档 已封档
</el-tag> </el-tag>
@ -88,7 +84,6 @@
<el-upload <el-upload
action="#" action="#"
multiple multiple
limit="3"
class="upload-demo" class="upload-demo"
:file-list="fileList" :file-list="fileList"
:auto-upload="false" :auto-upload="false"
@ -120,23 +115,41 @@
@closeDialogOuter="handleCloseDialogOuter" @closeDialogOuter="handleCloseDialogOuter"
> >
<template slot="outerContent"> <template slot="outerContent">
<el-table> <el-table :data="monthlyData.contractFile">
<el-table-column <el-table-column
align="center" align="center"
label="文件名称" label="文件名称"
prop="name" prop="originFileName"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="上传时间" label="上传时间"
prop="name" prop="createTime"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="上传人员" label="上传人员"
prop="name" prop="userName"
/> />
<el-table-column align="center" label="操作" prop="name" /> <el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-download"
@click="onHandleDownloadFile(scope.row)"
>
下载
</el-button>
<el-button
type="text"
icon="el-icon-delete"
style="color: #f56c6c"
@click="onHandleDeleteFile(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table> </el-table>
</template> </template>
</DialogModel> </DialogModel>
@ -149,6 +162,7 @@ import {
updateProMonthTableAPI, updateProMonthTableAPI,
uploadProMonthTableRefundAPI, uploadProMonthTableRefundAPI,
} from '@/api/synthesize-query/three-and-one' } from '@/api/synthesize-query/three-and-one'
import { deleteFileAPI } from '@/api/common'
import DialogModel from '@/components/DialogModel/index.vue' import DialogModel from '@/components/DialogModel/index.vue'
export default { export default {
name: 'HeaderInfo', name: 'HeaderInfo',
@ -169,12 +183,23 @@ export default {
default: '', default: '',
}, },
}, },
computed: {
fileCount() {
if (this.monthlyData.contractFile) {
return 3 - this.monthlyData.contractFile.length
}
return 3
},
},
data() { data() {
return { return {
uploadVisible: false, uploadVisible: false,
fileSize: 10, fileSize: 10,
fileList: [], fileList: [],
monthlyData: {}, monthlyData: {
contractFile: [],
},
dialogConfig: { dialogConfig: {
outerTitle: '银行回单查看', outerTitle: '银行回单查看',
outerWidth: '40%', outerWidth: '40%',
@ -197,7 +222,7 @@ export default {
}, },
{ {
label: '封档时间', label: '封档时间',
valueKey: 'refundTime', valueKey: 'blockTime',
}, },
{ {
label: '回单附件', label: '回单附件',
@ -236,12 +261,14 @@ export default {
const res = await updateProMonthTableAPI({ const res = await updateProMonthTableAPI({
id: this.id, id: this.id,
refundStatus: 2, status: 2,
}) })
if (res.code == 200) { if (res.code == 200) {
this.$modal.msgSuccess('封档成功') this.$modal.msgSuccess('封档成功')
this.getMonthlyData() this.getMonthlyData()
this.uploadVisible = false
this.fileList = []
} }
}) })
.catch(() => { .catch(() => {
@ -270,6 +297,9 @@ export default {
if (this.fileList.length > 0) { if (this.fileList.length > 0) {
// this.uploadVisible = false // this.uploadVisible = false
const formData = new FormData() const formData = new FormData()
const params = {
id: this.id,
}
const fileMsg = [] const fileMsg = []
this.fileList.forEach((item) => { this.fileList.forEach((item) => {
formData.append('files', item.raw) formData.append('files', item.raw)
@ -279,10 +309,14 @@ export default {
}) })
}) })
formData.append('fileMsg', JSON.stringify(fileMsg))
formData.append('params', JSON.stringify(params))
const res = await uploadProMonthTableRefundAPI(formData) const res = await uploadProMonthTableRefundAPI(formData)
if (res.code == 200) { if (res.code == 200) {
this.$modal.msgSuccess('回单上传成功') this.$modal.msgSuccess('回单上传成功')
this.getMonthlyData() this.getMonthlyData()
this.uploadVisible = false
this.fileList = []
} }
} else { } else {
this.$modal.msgError('请上传文件') this.$modal.msgError('请上传文件')
@ -345,13 +379,42 @@ export default {
// //
handleClickContractFile() { handleClickContractFile() {
console.log('查看附件') console.log('查看附件')
this.dialogConfig.outerVisible = true if (this.monthlyData.contractFile.length > 0) {
this.dialogConfig.outerVisible = true
} else {
this.$modal.msgError('暂无附件')
}
}, },
// //
handleCloseDialogOuter() { handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false this.dialogConfig.outerVisible = false
}, },
//
onHandleDeleteFile(row) {
console.log('删除附件', row)
this.$confirm('是否确定删除附件?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(async () => {
const res = await deleteFileAPI(row.id)
if (res.code == 200) {
this.$modal.msgSuccess('删除成功')
this.getMonthlyData()
}
})
.catch(() => {
// console.log('')
})
},
//
onHandleDownloadFile(row) {
window.open(row.lsUrl, '_blank')
},
}, },
} }
</script> </script>

View File

@ -11,29 +11,29 @@
> >
<el-form-item prop="subName"> <el-form-item prop="subName">
<el-input <el-input
placeholder="请输入分包"
clearable clearable
placeholder="请输入分包"
v-model.trim="nameListQueryParams.subName" v-model.trim="nameListQueryParams.subName"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="teamName"> <el-form-item prop="teamName">
<el-input <el-input
clearable clearable
v-model.trim="nameListQueryParams.teamName"
placeholder="请输入班组" placeholder="请输入班组"
v-model.trim="nameListQueryParams.teamName"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="userName"> <el-form-item prop="userName">
<el-input <el-input
clearable clearable
v-model.trim="nameListQueryParams.userName"
placeholder="请输入姓名" placeholder="请输入姓名"
v-model.trim="nameListQueryParams.userName"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="onDuty"> <el-form-item prop="onDuty">
<el-select <el-select
clearable clearable
placeholder="请输入在岗情况" placeholder="请选择在岗情况"
v-model="nameListQueryParams.onDuty" v-model="nameListQueryParams.onDuty"
> >
<el-option label="在岗" value="1" /> <el-option label="在岗" value="1" />
@ -128,7 +128,7 @@ export default {
}, },
data() { data() {
return { return {
total: 100, total: 0,
nameListQueryParams: { nameListQueryParams: {
monthId: this.id, monthId: this.id,
onDuty: '', onDuty: '',

View File

@ -11,20 +11,23 @@
> >
<el-form-item prop="bankCode"> <el-form-item prop="bankCode">
<el-input <el-input
v-model="wageInfoQueryParams.bankCode" clearable
placeholder="请输入银行卡号" placeholder="请输入银行卡号"
v-model.trim="wageInfoQueryParams.bankCode"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="teamName"> <el-form-item prop="teamName">
<el-input <el-input
v-model="wageInfoQueryParams.teamName" clearable
placeholder="请输入班组" placeholder="请输入班组"
v-model.trim="wageInfoQueryParams.teamName"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="userName"> <el-form-item prop="userName">
<el-input <el-input
v-model="wageInfoQueryParams.userName" clearable
placeholder="请输入姓名" placeholder="请输入姓名"
v-model.trim="wageInfoQueryParams.userName"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -61,8 +64,8 @@
stripe stripe
style="width: 100%" style="width: 100%"
:data="wageInfoListData" :data="wageInfoListData"
:header-cell-style="tableHeaderStyle"
:cell-style="tableCellStyle" :cell-style="tableCellStyle"
:header-cell-style="tableHeaderStyle"
> >
<el-table-column <el-table-column
align="center" align="center"

View File

@ -11,14 +11,16 @@
> >
<el-form-item prop="bankCode"> <el-form-item prop="bankCode">
<el-input <el-input
v-model="wagePayQueryParams.bankCode" clearable
placeholder="请输入银行卡号" placeholder="请输入银行卡号"
v-model.trim="wagePayQueryParams.bankCode"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="teamName"> <el-form-item prop="teamName">
<el-input <el-input
v-model="wagePayQueryParams.teamName" clearable
placeholder="请输入班组" placeholder="请输入班组"
v-model.trim="wagePayQueryParams.teamName"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="userName"> <el-form-item prop="userName">
@ -86,9 +88,19 @@
<el-input <el-input
clearable clearable
style="width: 100px" style="width: 100px"
v-model="scope.row[item.prop]" v-model.trim="scope.row[item.prop]"
:ref="`${scope.$index}-${item.prop}Ref`"
@change="
onIptChange(
$event,
item.prop,
scope.$index,
item.label,
)
"
v-if=" v-if="
(item.prop === 'dk' || item.prop === 'sf') && (item.prop === 'deductMoney' ||
item.prop === 'actualMoney') &&
isEdit isEdit
" "
/> />
@ -111,7 +123,10 @@
</template> </template>
<script> <script>
import { exportThreeAndOneMonthlyWagePaymentListAPI } from '@/api/synthesize-query/three-and-one' import {
exportThreeAndOneMonthlyWagePaymentListAPI,
saveThreeAndOneMonthlyWagePaymentAPI,
} from '@/api/synthesize-query/three-and-one'
export default { export default {
name: 'WagePay', name: 'WagePay',
props: { props: {
@ -134,65 +149,65 @@ export default {
columnData: [ columnData: [
{ {
label: '姓名', label: '姓名',
prop: 'entryTime', prop: 'userName',
}, },
{ {
label: '身份证号', label: '身份证号',
prop: 'exitTime', prop: 'idCard',
}, },
{ {
label: '所在班组', label: '所在班组',
prop: 'subcontractorName', prop: 'teamName',
}, },
{ {
label: '岗位', label: '岗位',
prop: 'totalEntryCount', prop: 'workName',
}, },
{ {
label: '出勤天数', label: '出勤天数',
prop: 'totalEntryCount', prop: 'attendanceNum',
}, },
{ {
label: '应发工资', label: '应发工资',
prop: 'totalEntryCount', prop: 'payMoney',
}, },
{ {
label: '其中代扣/代缴', label: '其中代扣/代缴',
prop: 'dk', prop: 'deductMoney',
width: 140, width: 140,
}, },
{ {
label: '实发工资', label: '实发工资',
prop: 'sf', prop: 'actualMoney',
width: 140, width: 140,
}, },
{ {
label: '开户银行', label: '开户银行',
prop: 'totalEntryCount', prop: 'bankName',
}, },
{ {
label: '收款银行联行号', label: '收款银行联行号',
prop: 'totalEntryCount', prop: 'bankNum',
}, },
{ {
label: '是否与劳动合同约定一致', label: '是否与劳动合同约定一致',
prop: 'totalEntryCount', prop: 'isAccord',
}, },
{ {
label: '本人签字', label: '本人签字',
prop: 'totalEntryCount', prop: 'signature',
}, },
{ {
label: '备注', label: '备注',
prop: 'totalEntryCount', prop: 'remark',
}, },
{ {
label: '转账日期', label: '转账日期',
prop: 'totalEntryCount', prop: 'date',
}, },
{ {
label: '银行凭证号', label: '银行凭证号',
prop: 'totalEntryCount', prop: 'bankNumber',
}, },
], ],
} }
@ -253,8 +268,70 @@ export default {
}, },
// -/ // -/
onHandleEditWagePay() { async onHandleEditWagePay() {
this.isEdit = !this.isEdit this.isEdit = !this.isEdit
if (!this.isEdit) {
const editData = this.wagePayListData.map((item) => {
return {
id: item.id,
deductMoney: item.deductMoney,
actualMoney: item.actualMoney,
}
})
// console.log(editData)
const res = await saveThreeAndOneMonthlyWagePaymentAPI(
JSON.stringify(editData),
)
console.log(res)
if (res.code === 200) {
this.$modal.msgSuccess('修改成功')
this.getThreeAndOneMonthlyWagePaymentList()
}
}
},
onIptChange(value, prop, index, label) {
// 0
const reg = /^[0-9]\d*(\.\d{1,2})?$/
const inputRef = `${index}-${prop}Ref`
const inputElement = this.$refs[inputRef]
if (!reg.test(value)) {
// this.$message.error('')
this.$modal.msgError(`${index + 1}${label}金额输入错误`)
//
if (inputElement && inputElement.length > 0) {
//
inputElement[0].focus()
//
const input = inputElement[0].$el.querySelector('input')
if (input) {
input.style.borderColor = '#f56c6c'
input.style.boxShadow =
'0 0 0 2px rgba(245, 108, 108, 0.2)'
// 2
// setTimeout(() => {
// input.style.borderColor = ''
// input.style.boxShadow = ''
// }, 2000)
}
}
return
} else {
if (inputElement && inputElement.length > 0) {
//
const input = inputElement[0].$el.querySelector('input')
if (input) {
input.style.borderColor = ''
input.style.boxShadow = ''
}
}
}
}, },
}, },
} }