分包商入场页面完善

This commit is contained in:
BianLzhaoMin 2025-08-15 16:19:21 +08:00
parent 40454371ea
commit a8afeff8d6
11 changed files with 1019 additions and 372 deletions

View File

@ -1,9 +1,10 @@
import request from '@/utils/request' import request from '@/utils/request'
import requestFormData from '@/utils/request_formdata'
// 新增分包入场信息 // 新增和修改分包入场信息
export const addSubEntryAPI = (data) => { export const addAndEditSubEntryAPI = (data) => {
return request({ return requestFormData({
url: '/project/***', url: '/bmw/subContract/addOrUpdateSubContract',
method: 'POST', method: 'POST',
data, data,
}) })
@ -17,27 +18,28 @@ export const subExitAPI = (data) => {
}) })
} }
// 修改分包入场信息 // 删除分包入场信息
export const editSubEntryAPI = (data) => { export const deleteSubEntryAPI = (data) => {
return request({ return request({
url: '/project/***', url: '/bmw/subContract/delSubContract',
method: 'POST', method: 'POST',
data, data,
}) })
} }
// 删除分包入场信息
export const deleteSubEntryAPI = (id) => {
return request({
url: `/project/****/${id}`,
method: 'DELETE',
})
}
// 获取分包入场信息列表 // 获取分包入场信息列表
export const getSubEntryListAPI = (data) => { export const getSubEntryListAPI = (data) => {
return request({ return request({
url: '/project/***', url: '/bmw/subContract/list',
method: 'GET',
params: data,
})
}
// 获取分包详情数据
export const getSubEntryDetailAPI = (data) => {
return request({
url: '/bmw/subContract/getSubContractById',
method: 'GET', method: 'GET',
params: data, params: data,
}) })

View File

@ -33,3 +33,11 @@ export function getLotProjectSelectListAPI() {
method: 'get', method: 'get',
}) })
} }
// 获取分包商下拉列表
export const getSubSelectListAPI = () => {
return request({
url: '/bmw/pmSub/listAll',
method: 'GET',
})
}

View File

@ -23,7 +23,7 @@
v-if="item.f_type === 'ipt'" v-if="item.f_type === 'ipt'"
v-model.trim="queryParams[item.f_model]" v-model.trim="queryParams[item.f_model]"
:placeholder="`请输入${item.f_label}`" :placeholder="`请输入${item.f_label}`"
:style="{ width: item.f_width || '240px' }" :style="{ width: item.f_width || '180px' }"
/> />
<el-select <el-select
clearable clearable
@ -31,7 +31,7 @@
v-if="item.f_type === 'sel'" v-if="item.f_type === 'sel'"
v-model="queryParams[item.f_model]" v-model="queryParams[item.f_model]"
:placeholder="`请选择${item.f_label}`" :placeholder="`请选择${item.f_label}`"
:style="{ width: item.f_width || '240px' }" :style="{ width: item.f_width || '180px' }"
> >
<el-option <el-option
:key="v" :key="v"
@ -42,7 +42,7 @@
</el-select> </el-select>
<el-cascader <el-cascader
clearable clearable
style="width: 240px" style="width: 180px"
:show-all-levels="false" :show-all-levels="false"
:props="item.optionProps" :props="item.optionProps"
:options="item.f_selList" :options="item.f_selList"
@ -58,7 +58,7 @@
" "
/> />
<el-cascader <el-cascader
style="width: 240px" style="width: 180px"
:show-all-levels="false" :show-all-levels="false"
:options="item.f_selList" :options="item.f_selList"
:props="item.optionProps" :props="item.optionProps"
@ -68,7 +68,7 @@
/> />
<el-date-picker <el-date-picker
type="date" type="date"
style="width: 240px" style="width: 180px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
v-if="item.f_type === 'date'" v-if="item.f_type === 'date'"
v-model="queryParams[item.f_model]" v-model="queryParams[item.f_model]"
@ -76,7 +76,7 @@
/> />
<el-date-picker <el-date-picker
type="daterange" type="daterange"
style="width: 240px" style="width: 180px"
range-separator="至" range-separator="至"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
start-placeholder="开始日期" start-placeholder="开始日期"

View File

@ -8,6 +8,8 @@ const common = {
subCompanySelectList: [], subCompanySelectList: [],
// 标段工程下拉列表 // 标段工程下拉列表
lotProjectSelectList: [], lotProjectSelectList: [],
// 分包商下拉列表
subSelectList: [],
}, },
mutations: { mutations: {
SET_COMPANY_SELECT_LIST(state, companySelectList) { SET_COMPANY_SELECT_LIST(state, companySelectList) {
@ -22,6 +24,9 @@ const common = {
SET_LOT_PROJECT_SELECT_LIST(state, lotProjectSelectList) { SET_LOT_PROJECT_SELECT_LIST(state, lotProjectSelectList) {
state.lotProjectSelectList = lotProjectSelectList state.lotProjectSelectList = lotProjectSelectList
}, },
SET_SUB_SELECT_LIST(state, subSelectList) {
state.subSelectList = subSelectList
},
}, },
} }

View File

@ -4,6 +4,7 @@ import {
getMainProjectListAllAPI, getMainProjectListAllAPI,
getSubCompanySelectListAPI, getSubCompanySelectListAPI,
getLotProjectSelectListAPI, getLotProjectSelectListAPI,
getSubSelectListAPI,
} from '@/api/common' } from '@/api/common'
// 获取公司下拉列表 // 获取公司下拉列表
@ -62,3 +63,16 @@ export async function getLotProjectSelectListCommonFun() {
} }
return [] return []
} }
// 获取分包下拉列表
export async function getSubSelectListCommonFun() {
const { subSelectList } = store.state.common
if (subSelectList.length > 0) {
return subSelectList
}
const res = await getSubSelectListAPI()
if (res.code === 200) {
store.commit('SET_SUB_SELECT_LIST', res.rows)
return res.rows
}
return []
}

View File

@ -1,176 +0,0 @@
<template>
<!-- 新增或修改标段工程表单 -->
<div>
<el-form
label-width="180px"
ref="addOrEditFormRef"
:model="addOrEditForm"
:rules="addOrEditFormRules"
>
<el-row>
<el-col :span="24">
<el-form-item label="分包商合同名称" prop="htName">
<el-input
clearable
placeholder="请输入分包商合同名称"
v-model="addOrEditForm.htName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包名称" prop="subName">
<el-input
clearable
placeholder="请输入分包名称"
v-model="addOrEditForm.subName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工程名称" prop="projectName">
<el-input
clearable
placeholder="请输入工程名称"
v-model="addOrEditForm.projectName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="入场日期" prop="entryDate">
<el-date-picker
type="date"
style="width: 100%"
value-format="yyyy-MM-dd"
placeholder="请选择入场日期"
v-model="addOrEditForm.entryDate"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item
label="法定代表人授权委托书"
prop="businessLicense"
>
<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>
</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: {
htName: '',
subName: '',
projectName: '',
entryDate: '',
businessLicense: [],
},
addOrEditFormRules: {
htName: [
{
required: true,
message: '请输入分包商合同名称',
trigger: 'blur',
},
],
subName: [
{
required: true,
message: '请输入分包商名称',
trigger: 'blur',
},
],
projectName: [
{
required: true,
message: '请输入工程名称',
trigger: 'blur',
},
],
entryDate: [
{
required: true,
message: '请选择入场日期',
trigger: 'blur',
},
],
businessLicense: [
{
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>

View File

@ -1,7 +1,13 @@
export const formLabel = [ export const formLabel = [
{ {
f_label: '分包合同', f_label: '分包合同编码',
f_model: 'htName', f_model: 'subContractCode',
f_type: 'ipt',
isShow: false, // 是否展示label
},
{
f_label: '分包合同名称',
f_model: 'subContractName',
f_type: 'ipt', f_type: 'ipt',
isShow: false, // 是否展示label isShow: false, // 是否展示label
}, },
@ -13,30 +19,42 @@ export const formLabel = [
}, },
{ {
f_label: '工程名称', f_label: '工程名称',
f_model: 'projectName', f_model: 'proName',
f_type: 'ipt', f_type: 'sel',
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_selList: [],
}, },
{ {
f_label: '状态', f_label: '状态',
f_model: 'status', f_model: 'subEinStatus',
f_type: 'sel', f_type: 'sel',
isShow: false, // 是否展示label isShow: false, // 是否展示label
f_selList: [
{
label: '在场',
value: 1,
},
{
label: '出场',
value: 2,
},
], // 状态列表
}, },
] ]
export const columnsList = [ export const columnsList = [
{ t_props: 'projectName', t_label: '分包商合同名称' }, { t_props: 'subContractCode', t_label: '分包商合同编码' },
{ t_props: 'xmb', t_label: '分包商名称' }, { t_props: 'subContractName', t_label: '分包商合同名称' },
{ t_props: 'name', t_label: '工程名称' }, { t_props: 'subName', t_label: '分包商名称' },
{ t_props: 'type', t_label: '出入场状态' }, { t_props: 'proName', t_label: '工程名称' },
{ t_slot: 'subEinStatus', t_label: '出入场状态' },
{ {
t_props: 'businessLicense', t_props: 'subEinTime',
t_label: '分包入场时间', t_label: '分包入场时间',
}, },
{ t_props: 'idCard', t_label: '授权委托书', t_slot: 'idCard' }, { t_props: 'idCard', t_label: '授权委托书', t_slot: 'idCard' },
{ {
t_props: 'electronicStamp', t_props: 'subExitTime',
t_label: '分包出场时间', t_label: '分包出场时间',
}, },
{ {
@ -45,52 +63,10 @@ export const columnsList = [
}, },
] ]
export const testTableList = [
{
projectName: '总工程名称',
level: '等级3',
xmb: 'xxx项目部',
name: '110kv工程',
type: '基建变电',
address: '安徽省合肥市110k工程',
status: '在建',
businessLicense: '已上传',
idCard: '已上传',
electronicStamp: '已上传',
electronicSignature: '未上传',
},
{
projectName: '总工程名称21',
level: '等级3',
xmb: 'xxx项目部',
name: '110kv工程',
type: '基建变电',
address: '安徽省合肥市110k工程',
status: '在建',
businessLicense: '已上传',
idCard: '已上传',
electronicStamp: '已上传',
electronicSignature: '未上传',
},
{
projectName: '总工程名称3',
level: '等级3',
xmb: 'xxx项目部',
name: '110kv工程',
type: '基建变电',
address: '安徽省合肥市110k工程',
status: '在建',
businessLicense: '已上传',
idCard: '已上传',
electronicStamp: '已上传',
electronicSignature: '未上传',
},
]
export const dialogConfig = { export const dialogConfig = {
outerVisible: false, outerVisible: false,
outerTitle: '', outerTitle: '',
outerWidth: '60%', outerWidth: '50%',
minHeight: '', minHeight: '',
maxHeight: '', maxHeight: '',
} }

View File

@ -0,0 +1,351 @@
<template>
<!-- 分包入场表单 -->
<div>
<el-form
label-width="240px"
ref="addOrEditFormRef"
:model="addOrEditForm"
:rules="addOrEditFormRules"
>
<el-row>
<el-col :span="24">
<el-form-item label="分包商合同编码">
<el-input
disabled
v-model="addOrEditForm.subContractCode"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包商合同名称">
<el-input
disabled
v-model="addOrEditForm.subContractName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包名称" prop="subId">
<el-select
style="width: 100%"
:disabled="queryDetailId !== ''"
v-model="addOrEditForm.subId"
>
<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>
<el-col :span="24">
<el-form-item label="工程名称" prop="proId">
<el-select
style="width: 100%"
:disabled="queryDetailId !== ''"
v-model="addOrEditForm.proId"
>
<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>
<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.subEinTime"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item
label="法定代表人授权书"
prop="businessLicense"
>
<UploadFileFormData
:limit="3"
:file-size="20"
:multiple="true"
uploadTip=" "
:file-list.sync="addOrEditForm.businessLicense"
:file-type="[
'jpg',
'png',
'jpeg',
'pdf',
'doc',
'docx',
]"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<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.subExitTime"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item
label="农民工工资已支付完成承诺书"
prop="businessLicense"
>
<UploadFileFormData
:limit="3"
:file-size="20"
:multiple="true"
uploadTip=" "
:file-list.sync="addOrEditForm.businessLicense"
:file-type="[
'jpg',
'png',
'jpeg',
'pdf',
'doc',
'docx',
]"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import UploadImg from '@/components/UploadImg'
import UploadFileFormData from '@/components/UploadFileFormData'
import {
addAndEditSubEntryAPI,
getSubEntryDetailAPI,
} from '@/api/basic-manage/sub-manage/sub-entry-and-exit'
import {
getSubSelectListCommonFun,
getLotProjectSelectListCommonFun,
} from '@/utils/getCommonData'
export default {
name: 'AddOrEditForm',
components: {
UploadImg,
UploadFileFormData,
},
props: {
queryDetailId: {
type: [String, Number],
default: '',
},
},
data() {
return {
addOrEditForm: {
subContractCode: '', //
subContractName: '', //
subId: '', // id
proId: '', // id
businessLicense: [], //
id: '', // id
subEinTime: '',
subExitTime: '',
},
addOrEditFormRules: {
subContractCode: [
{
required: true,
message: '请输入分包商合同编码',
trigger: 'blur',
},
],
subContractName: [
{
required: true,
message: '请输入分包商合同名称',
trigger: 'blur',
},
],
subId: [
{
required: true,
message: '请选择分包商名称',
trigger: 'change',
},
],
proId: [
{
required: true,
message: '请选择工程名称',
trigger: 'change',
},
],
businessLicense: [
{
required: true,
message: '请上传法定代表人授权委托书',
trigger: 'blur',
},
],
},
subSelectList: [], //
lotProjectSelectList: [], //
}
},
methods: {
//
onHandleConfirmAddOrEditFun() {
return new Promise((resolve, reject) => {
this.$refs.addOrEditFormRef.validate(async (valid) => {
if (valid) {
console.log(this.addOrEditForm)
const {
subId,
proId,
subContractName,
subContractCode,
businessLicense,
id,
} = this.addOrEditForm
const params = {
subId,
proId,
subContractName,
subContractCode,
subEinStatus: 1,
}
const fileMsg = []
const formData = new FormData()
if (id) {
params.id = id
}
businessLicense.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 1,
name: '法定代表人授权书',
})
})
formData.append('fileMsg', JSON.stringify(fileMsg))
formData.append('params', JSON.stringify(params))
// const API =
// this.formType === 1
// ? addSubBaseInfoAPI
// : editSubBaseInfoAPI
const res = await addAndEditSubEntryAPI(formData)
console.log(res, '分包入场结果')
if (res.code === 200) {
this.$modal.msgSuccess('操作成功')
resolve()
} else {
reject(new Error(res.message))
}
} else {
reject(new Error('表单验证失败'))
}
})
})
},
//
resetForm() {
this.$refs.addOrEditFormRef.resetFields()
},
//
async getSubEntryDetail() {
const { data: res } = await getSubEntryDetailAPI({
id: this.queryDetailId,
})
const {
id,
subId,
proId,
subContractName,
subContractCode,
subEinTime,
subExitTime,
} = res
this.addOrEditForm = {
id,
subId,
proId,
subContractName,
subContractCode,
businessLicense: [],
subEinTime,
subExitTime,
}
},
},
async created() {
const sub = await getSubSelectListCommonFun()
this.subSelectList = sub.map((item) => {
return {
label: item.subName,
value: item.id,
}
})
const pro = await getLotProjectSelectListCommonFun()
this.lotProjectSelectList = pro.map((item) => {
return {
label: item.proName,
value: item.id,
}
})
},
watch: {
queryDetailId: {
handler(newVal) {
if (newVal) {
this.getSubEntryDetail()
}
},
deep: true,
immediate: true,
},
},
}
</script>

View File

@ -0,0 +1,294 @@
<template>
<!-- 分包入场表单 -->
<div>
<el-form
label-width="180px"
ref="addOrEditFormRef"
:model="addOrEditForm"
:rules="addOrEditFormRules"
>
<el-row>
<el-col :span="24">
<el-form-item label="分包商合同编码" prop="subContractCode">
<el-input
clearable
placeholder="请输入分包商合同编码"
v-model="addOrEditForm.subContractCode"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包商合同名称" prop="subContractName">
<el-input
clearable
placeholder="请输入分包商合同名称"
v-model="addOrEditForm.subContractName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包名称" prop="subId">
<el-select
clearable
filterable
style="width: 100%"
:disabled="queryDetailId !== ''"
v-model="addOrEditForm.subId"
placeholder="请选择分包商名称"
>
<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>
<el-col :span="24">
<el-form-item label="工程名称" prop="proId">
<el-select
clearable
filterable
style="width: 100%"
:disabled="queryDetailId !== ''"
v-model="addOrEditForm.proId"
placeholder="请选择工程名称"
>
<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>
<el-col :span="24">
<el-form-item
label="法定代表人授权书"
prop="businessLicense"
>
<UploadFileFormData
:limit="3"
:file-size="20"
:multiple="true"
uploadTip=" "
:file-list.sync="addOrEditForm.businessLicense"
:file-type="[
'jpg',
'png',
'jpeg',
'pdf',
'doc',
'docx',
]"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import UploadImg from '@/components/UploadImg'
import UploadFileFormData from '@/components/UploadFileFormData'
import {
addAndEditSubEntryAPI,
getSubEntryDetailAPI,
} from '@/api/basic-manage/sub-manage/sub-entry-and-exit'
import {
getSubSelectListCommonFun,
getLotProjectSelectListCommonFun,
} from '@/utils/getCommonData'
export default {
name: 'AddOrEditForm',
components: {
UploadImg,
UploadFileFormData,
},
props: {
queryDetailId: {
type: [String, Number],
default: '',
},
},
data() {
return {
addOrEditForm: {
subContractCode: '', //
subContractName: '', //
subId: '', // id
proId: '', // id
businessLicense: [], //
id: '', // id
},
addOrEditFormRules: {
subContractCode: [
{
required: true,
message: '请输入分包商合同编码',
trigger: 'blur',
},
],
subContractName: [
{
required: true,
message: '请输入分包商合同名称',
trigger: 'blur',
},
],
subId: [
{
required: true,
message: '请选择分包商名称',
trigger: 'change',
},
],
proId: [
{
required: true,
message: '请选择工程名称',
trigger: 'change',
},
],
businessLicense: [
{
required: true,
message: '请上传法定代表人授权委托书',
trigger: 'blur',
},
],
},
subSelectList: [], //
lotProjectSelectList: [], //
}
},
methods: {
//
onHandleConfirmAddOrEditFun() {
return new Promise((resolve, reject) => {
this.$refs.addOrEditFormRef.validate(async (valid) => {
if (valid) {
console.log(this.addOrEditForm)
const {
subId,
proId,
subContractName,
subContractCode,
businessLicense,
id,
} = this.addOrEditForm
const params = {
subId,
proId,
subContractName,
subContractCode,
subEinStatus: 1,
}
const fileMsg = []
const formData = new FormData()
if (id) {
params.id = id
}
businessLicense.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 1,
name: '法定代表人授权书',
})
})
formData.append('fileMsg', JSON.stringify(fileMsg))
formData.append('params', JSON.stringify(params))
// const API =
// this.formType === 1
// ? addSubBaseInfoAPI
// : editSubBaseInfoAPI
const res = await addAndEditSubEntryAPI(formData)
console.log(res, '分包入场结果')
if (res.code === 200) {
this.$modal.msgSuccess('操作成功')
resolve()
} else {
reject(new Error(res.message))
}
} else {
reject(new Error('表单验证失败'))
}
})
})
},
//
resetForm() {
this.$refs.addOrEditFormRef.resetFields()
},
//
async getSubEntryDetail() {
const { data: res } = await getSubEntryDetailAPI({
id: this.queryDetailId,
})
const { id, subId, proId, subContractName, subContractCode } = res
this.addOrEditForm = {
id,
subId,
proId,
subContractName,
subContractCode,
businessLicense: [],
}
},
},
async created() {
const sub = await getSubSelectListCommonFun()
this.subSelectList = sub.map((item) => {
return {
label: item.subName,
value: item.id,
}
})
const pro = await getLotProjectSelectListCommonFun()
this.lotProjectSelectList = pro.map((item) => {
return {
label: item.proName,
value: item.id,
}
})
},
watch: {
queryDetailId: {
handler(newVal) {
if (newVal) {
this.getSubEntryDetail()
}
},
deep: true,
immediate: true,
},
},
}
</script>

View File

@ -1,58 +1,81 @@
<template> <template>
<!-- 新增或修改标段工程表单 --> <!-- 分包入场表单 -->
<div> <div>
<div class="tip-text" style="margin-bottom: 20px">
说明分包商出场需此分包合同下的班组全部出场后操作
<br />
<br />
检测到分包下存在2个班组12名施工人员未出场
</div>
<el-form <el-form
label-width="220px" label-width="240px"
ref="addOrEditFormRef" ref="addOrEditFormRef"
:model="addOrEditForm" :model="addOrEditForm"
:rules="addOrEditFormRules" :rules="addOrEditFormRules"
> >
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="分包商合同名称" prop="htName"> <el-form-item label="分包商合同编码" prop="subContractCode">
<el-input <el-input
clearable
disabled disabled
clearable
placeholder="请输入分包商合同编码"
v-model="addOrEditForm.subContractCode"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="分包商合同名称" prop="subContractName">
<el-input
disabled
clearable
placeholder="请输入分包商合同名称" placeholder="请输入分包商合同名称"
v-model="addOrEditForm.htName" v-model="addOrEditForm.subContractName"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="分包名称" prop="subName"> <el-form-item label="分包名称" prop="subId">
<el-input <el-select
clearable
disabled disabled
placeholder="请输入分包名称"
v-model="addOrEditForm.subName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工程名称" prop="projectName">
<el-input
clearable clearable
disabled filterable
placeholder="请输入工程名称"
v-model="addOrEditForm.projectName"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="出场日期" prop="exitDate">
<el-date-picker
type="date"
style="width: 100%" style="width: 100%"
value-format="yyyy-MM-dd" v-model="addOrEditForm.subId"
placeholder="请选择出场日期" placeholder="请选择分包商名称"
v-model="addOrEditForm.exitDate" >
/> <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>
<el-col :span="24">
<el-form-item label="工程名称" prop="proId">
<el-select
disabled
clearable
filterable
style="width: 100%"
v-model="addOrEditForm.proId"
placeholder="请选择工程名称"
>
<el-option
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in lotProjectSelectList"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -60,19 +83,23 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item <el-form-item
prop="businessLicense"
label="农民工工资已支付完成承诺书" label="农民工工资已支付完成承诺书"
prop="businessLicense"
> >
<UploadImg <UploadFileFormData
:limit="30" :limit="3"
:file-size="10" :file-size="20"
:multiple="true" :multiple="true"
:file-type="['jpg', 'png', 'jpeg']" uploadTip=" "
:upload-file-url="uploadFileUrl"
:file-list.sync="addOrEditForm.businessLicense" :file-list.sync="addOrEditForm.businessLicense"
:is-uploaded=" :file-type="[
addOrEditForm.businessLicense.length >= 2 'jpg',
" 'png',
'jpeg',
'pdf',
'doc',
'docx',
]"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -83,64 +110,73 @@
<script> <script>
import UploadImg from '@/components/UploadImg' import UploadImg from '@/components/UploadImg'
import UploadFileFormData from '@/components/UploadFileFormData'
import { addAndEditSubEntryAPI } from '@/api/basic-manage/sub-manage/sub-entry-and-exit'
import { import {
addSubBaseInfoAPI, getSubSelectListCommonFun,
editSubBaseInfoAPI, getLotProjectSelectListCommonFun,
} from '@/api/basic-manage/sub-manage/sub-base-info' } from '@/utils/getCommonData'
export default { export default {
name: 'AddOrEditForm', name: 'AddOrEditForm',
components: { components: {
UploadImg, UploadImg,
UploadFileFormData,
},
props: {
exitFormData: {
type: Object,
default: () => {},
},
}, },
data() { data() {
return { return {
formType: 1,
uploadFileUrl:
process.env.VUE_APP_BASE_API + '/system/file/uploadFiles',
addOrEditForm: { addOrEditForm: {
htName: '', subContractCode: '', //
subName: '', subContractName: '', //
projectName: '', subId: '', // id
entryDate: '', proId: '', // id
businessLicense: [], businessLicense: [], //
}, },
addOrEditFormRules: { addOrEditFormRules: {
htName: [ subContractCode: [
{
required: true,
message: '请输入分包商合同编码',
trigger: 'blur',
},
],
subContractName: [
{ {
required: true, required: true,
message: '请输入分包商合同名称', message: '请输入分包商合同名称',
trigger: 'blur', trigger: 'blur',
}, },
], ],
subName: [ subId: [
{ {
required: true, required: true,
message: '请输入分包商名称', message: '请选择分包商名称',
trigger: 'blur', trigger: 'change',
}, },
], ],
projectName: [ proId: [
{ {
required: true, required: true,
message: '请输入工程名称', message: '请选择工程名称',
trigger: 'blur', trigger: 'change',
},
],
entryDate: [
{
required: true,
message: '请选择入场日期',
trigger: 'blur',
}, },
], ],
businessLicense: [ businessLicense: [
{ {
required: true, required: true,
message: '请上传法定代表人授权委托书', message: '请上传农民工工资已支付完成承诺书',
trigger: 'blur', trigger: 'blur',
}, },
], ],
}, },
subSelectList: [], //
lotProjectSelectList: [], //
} }
}, },
methods: { methods: {
@ -151,17 +187,46 @@ export default {
if (valid) { if (valid) {
console.log(this.addOrEditForm) console.log(this.addOrEditForm)
// const API = const {
// this.formType === 1 subId,
// ? addSubBaseInfoAPI proId,
// : editSubBaseInfoAPI subContractName,
// const res = await API(this.addOrEditForm) subContractCode,
// console.log(res, '') businessLicense,
// if (res.code === 200) { id,
// resolve() } = this.addOrEditForm
// } else {
// reject(new Error(res.message)) const params = {
// } id,
subId,
proId,
subContractName,
subContractCode,
subEinStatus: 2,
}
const fileMsg = []
const formData = new FormData()
businessLicense.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 2,
name: '农民工工资已支付完成承诺书',
})
})
formData.append('fileMsg', JSON.stringify(fileMsg))
formData.append('params', JSON.stringify(params))
const res = await addAndEditSubEntryAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('出场成功')
resolve()
} else {
reject(new Error(res.message))
}
} else { } else {
reject(new Error('表单验证失败')) reject(new Error('表单验证失败'))
} }
@ -174,5 +239,43 @@ export default {
this.$refs.addOrEditFormRef.resetFields() this.$refs.addOrEditFormRef.resetFields()
}, },
}, },
async created() {
// this.subSelectList = await getSubSelectListCommonFun()
const sub = await getSubSelectListCommonFun()
this.subSelectList = sub.map((item) => {
return {
label: item.subName,
value: item.id,
}
})
const pro = await getLotProjectSelectListCommonFun()
this.lotProjectSelectList = pro.map((item) => {
return {
label: item.proName,
value: item.id,
}
})
// console.log(subSelectList, '')
// this.lotProjectSelectList = await getLotProjectSelectListCommonFun()
// console.log(lotProjectSelectList, '')
},
watch: {
exitFormData: {
handler(newVal) {
// console.log(newVal, 'exitFormData')
if (Object.keys(newVal).length > 0) {
Object.assign(this.addOrEditForm, newVal)
}
},
deep: true,
immediate: true,
},
},
} }
</script> </script>

View File

@ -5,10 +5,9 @@
:formLabel="formLabel" :formLabel="formLabel"
:showOperation="true" :showOperation="true"
:showRightTools="true" :showRightTools="true"
ref="allProjectTableRef" ref="subEntryTableRef"
:columnsList="columnsList" :columnsList="columnsList"
:testTableList="testTableList" :request-api="getSubEntryListAPI"
:request-api="getSubBaseInfoListAPI"
> >
<template slot="btn" slot-scope="{ queryParams }"> <template slot="btn" slot-scope="{ queryParams }">
<el-button <el-button
@ -16,7 +15,7 @@
size="mini" size="mini"
type="success" type="success"
icon="el-icon-download" icon="el-icon-download"
@click="onHandleExportAllProject(queryParams)" @click="onHandleExportSubEntry(queryParams)"
> >
导出 导出
</el-button> </el-button>
@ -26,14 +25,15 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
@click="onHandleAddOrEditAllProject(1, null)" v-hasPermi="['sub:entry:add']"
@click="onHandleAddOrEditSubEntry(1, null)"
> >
新增 新增
</el-button> </el-button>
</template> </template>
<!-- 标段工程数量 --> <!-- 标段工程数量 -->
<template :slot="item" slot-scope="{ data }" v-for="item in slots"> <!-- <template :slot="item" slot-scope="{ data }" v-for="item in slots">
<span <span
:style="{ :style="{
color: data[item] === '已上传' ? '#67C23A' : '#F56C6C', color: data[item] === '已上传' ? '#67C23A' : '#F56C6C',
@ -44,6 +44,15 @@
> >
{{ data[item] }} {{ data[item] }}
</span> </span>
</template> -->
<template slot="subEinStatus" slot-scope="{ data }">
<el-tag
size="mini"
:type="data.subEinStatus == 1 ? 'success' : 'danger'"
>
{{ data.subEinStatus == 1 ? '在场' : '出场' }}
</el-tag>
</template> </template>
<template slot="handle" slot-scope="{ data }"> <template slot="handle" slot-scope="{ data }">
@ -53,6 +62,7 @@
type="success" type="success"
icon="el-icon-check" icon="el-icon-check"
@click="onHandleExit(data)" @click="onHandleExit(data)"
v-hasPermi="['sub:exit:add']"
> >
出场 出场
</el-button> </el-button>
@ -61,7 +71,8 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-edit" icon="el-icon-edit"
@click="onHandleAddOrEditAllProject(2, data)" v-hasPermi="['sub:entry:edit']"
@click="onHandleAddOrEditSubEntry(2, data)"
> >
修改 修改
</el-button> </el-button>
@ -69,11 +80,17 @@
size="mini" size="mini"
type="danger" type="danger"
icon="el-icon-delete" icon="el-icon-delete"
@click="onHandleDeleteAllProject(data)" v-hasPermi="['sub:entry:delete']"
@click="onHandleDeleteSubEntry(data)"
> >
删除 删除
</el-button> </el-button>
<el-button size="mini" type="primary" icon="el-icon-view"> <el-button
size="mini"
type="primary"
icon="el-icon-view"
@click="onHandleViewEntryDetails(data)"
>
详情 详情
</el-button> </el-button>
</template> </template>
@ -84,11 +101,24 @@
@closeDialogOuter="handleCloseDialogOuter" @closeDialogOuter="handleCloseDialogOuter"
> >
<template slot="outerContent"> <template slot="outerContent">
<AddOrEditForm <EntryForm
ref="addOrEditFormContentRef" ref="subEntryFormRef"
v-if="dialogConfig.outerTitle !== '出场'" :queryDetailId="queryDetailId"
v-if="
dialogConfig.outerTitle === '分包入场' ||
dialogConfig.outerTitle === '修改分包入场'
"
/>
<ExitForm
v-if="dialogConfig.outerTitle === '出场'"
ref="exitFormContentRef"
:exitFormData="exitFormData"
/>
<EntryDetails
ref="entryDetailsRef"
:queryDetailId="queryDetailId"
v-if="dialogConfig.outerTitle === '分包入场详情'"
/> />
<ExitForm ref="exitFormContentRef" v-else />
<el-row class="dialog-footer-btn"> <el-row class="dialog-footer-btn">
<el-button size="medium" @click="handleCloseDialogOuter"> <el-button size="medium" @click="handleCloseDialogOuter">
@ -110,20 +140,25 @@
<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 ExitForm from './exit-form' import ExitForm from './exit-form'
import { formLabel, columnsList, dialogConfig, testTableList } from './config' import EntryForm from './entry-form'
import EntryDetails from './entry-details'
import { formLabel, columnsList, dialogConfig } from './config'
import { import {
deleteSubBaseInfoAPI, deleteSubEntryAPI,
getSubBaseInfoListAPI, getSubEntryListAPI,
} from '@/api/basic-manage/sub-manage/sub-base-info' } from '@/api/basic-manage/sub-manage/sub-entry-and-exit'
import { getLotProjectSelectListCommonFun } from '@/utils/getCommonData'
export default { export default {
name: 'SubEntryAndExit', name: 'SubEntryAndExit',
components: { components: {
TableModel, TableModel,
DialogModel, DialogModel,
AddOrEditForm,
ExitForm, ExitForm,
EntryForm,
EntryDetails,
}, },
data() { data() {
@ -131,8 +166,11 @@ export default {
formLabel, formLabel,
columnsList, columnsList,
dialogConfig, dialogConfig,
testTableList,
getSubBaseInfoListAPI, getSubEntryListAPI,
exitFormData: {},
queryDetailId: '',
slots: { slots: {
idCard: 'idCard', idCard: 'idCard',
@ -146,34 +184,49 @@ export default {
}, },
// //
onHandleAddOrEditAllProject(type, data) { onHandleAddOrEditSubEntry(type, data) {
this.dialogConfig.outerTitle = this.dialogConfig.outerTitle =
type === 1 ? '新增标段工程' : '修改标段工程' type === 1 ? '分包入场' : '修改分包入场'
if (type === 2) {
this.queryDetailId = data.id
} else {
this.queryDetailId = ''
}
this.dialogConfig.outerVisible = true this.dialogConfig.outerVisible = true
}, },
// //
onHandleDeleteAllProject(data) { onHandleDeleteSubEntry(data) {
this.$confirm('确定删除该工程吗?', '温馨提示', { this.$confirm('确定删除该分包入场信息吗?', '温馨提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}) })
.then(async () => { .then(async () => {
const res = await deleteSubBaseInfoAPI(data.id) const res = await deleteSubEntryAPI({
console.log(res, '删除结果') id: data.id,
})
if (res.code === 200) { if (res.code === 200) {
this.$msgSuccess('删除成功') this.$modal.msgSuccess('删除成功')
this.$refs.allProjectTableRef.getTableList() // this.$refs.subEntryTableRef.getTableList() //
} }
}) })
.catch(() => { .catch(() => {
console.log('取消') // console.log('')
}) })
}, },
// //
onHandleExit(data) { onHandleExit(data) {
const { id, subId, proId, subContractCode, subContractName } = data
this.exitFormData = {
id,
subId,
proId,
subContractCode,
subContractName,
}
this.dialogConfig.outerTitle = '出场' this.dialogConfig.outerTitle = '出场'
this.dialogConfig.outerVisible = true this.dialogConfig.outerVisible = true
}, },
@ -181,13 +234,18 @@ export default {
// //
async onHandleConfirmAddOrEdit() { async onHandleConfirmAddOrEdit() {
try { try {
if (this.dialogConfig.outerTitle === '新增标段工程') { if (
this.$refs.addOrEditFormContentRef.formType = this.dialogConfig.outerTitle === '分包入场' ||
this.dialogConfig.outerTitle === '新增标段工程' ? 1 : 2 this.dialogConfig.outerTitle === '修改分包入场'
await this.$refs.addOrEditFormContentRef.onHandleConfirmAddOrEditFun() ) {
await this.$refs.subEntryFormRef.onHandleConfirmAddOrEditFun()
this.$refs.subEntryTableRef.getTableList()
this.handleCloseDialogOuter()
} }
if (this.dialogConfig.outerTitle === '出场') { if (this.dialogConfig.outerTitle === '出场') {
await this.$refs.exitFormContentRef.onHandleConfirmAddOrEditFun() await this.$refs.exitFormContentRef.onHandleConfirmAddOrEditFun()
this.$refs.subEntryTableRef.getTableList()
this.handleCloseDialogOuter()
} }
} catch (error) { } catch (error) {
console.log('表单提交失败', error) console.log('表单提交失败', error)
@ -196,14 +254,26 @@ export default {
// //
handleCloseDialogOuter() { handleCloseDialogOuter() {
//
if (this.dialogConfig.outerTitle === '新增标段工程') {
this.$refs.addOrEditFormContentRef.resetForm()
} else if (this.dialogConfig.outerTitle === '出场') {
this.$refs.exitFormContentRef.resetForm()
}
this.dialogConfig.outerVisible = false this.dialogConfig.outerVisible = false
}, },
//
onHandleViewEntryDetails(data) {
this.queryDetailId = data.id
this.dialogConfig.outerTitle = '分包入场详情'
this.dialogConfig.outerVisible = true
},
},
async created() {
const pro = await getLotProjectSelectListCommonFun()
formLabel[3].f_selList = pro.map((item) => {
return {
label: item.proName,
value: item.proName,
}
})
}, },
} }
</script> </script>