合同见证完善以及红绿灯统计页面初步完善

This commit is contained in:
BianLzhaoMin 2025-08-15 10:58:45 +08:00
parent 7b8fcd138e
commit fc5c10a3bc
17 changed files with 598 additions and 214 deletions

View File

@ -1,9 +1,10 @@
import request from '@/utils/request'
import requestFormData from '@/utils/request_formdata'
// 新增分包商基础信息
export const addSubBaseInfoAPI = (data) => {
return request({
url: '/project/***',
// 新增和修改分包商基础信息
export const addAndEditSubBaseInfoAPI = (data) => {
return requestFormData({
url: '/bmw/pmSub/addOrUpdateSub',
method: 'POST',
data,
})
@ -29,7 +30,7 @@ export const deleteSubBaseInfoAPI = (id) => {
// 获取分包商基础信息列表
export const getSubBaseInfoListAPI = (data) => {
return request({
url: '/project/***',
url: '/bmw/pmSub/list',
method: 'GET',
params: data,
})

View File

@ -35,3 +35,10 @@ export const uploadContractAPI = (data) => {
data,
})
}
// 合同见证 查询合同详情
export const getContractDetailLookFileAPI = (id) => {
return request({
url: `/bmw/workerContract/lookFile/${id}`,
method: 'post',
})
}

View File

@ -0,0 +1,19 @@
import request from '@/utils/request'
// 红绿灯统计 列表查询接口
export const getRedAndGreenCountListAPI = (data) => {
return request({
url: '/bmw/redGreenCount/**',
method: 'get',
params: data,
})
}
// 红绿灯统计 内层工程列表查询接口
export const getRedAndGreenCountProjectListAPI = (data) => {
return request({
url: '/bmw/redGreenCount/list',
method: 'get',
params: data,
})
}

View File

@ -21,10 +21,9 @@ export async function getCompanySelectListCommonFun() {
return []
}
// 获取总包工程列表
// 获取总包工程下拉列表
export async function getMainProjectListCommonFun() {
const { mainProjectList } = store.state.common
console.log(mainProjectList, 'mainProjectList')
if (mainProjectList.length > 0) {
return mainProjectList
}

View File

@ -93,6 +93,9 @@
style="width: 100%"
placeholder="请选择所属分公司"
v-model="addOrEditForm.subComId"
:disabled="
dialogConfig.outerTitle === '修改项目部'
"
>
<el-option
:key="item.id"

View File

@ -15,6 +15,7 @@
filterable
style="width: 100%"
placeholder="请选择"
:disabled="formType === 2"
v-model="addOrEditForm.mainProId"
>
<el-option
@ -48,6 +49,7 @@
:searchable="false"
:show-count="true"
noOptionsText="没有数据"
:disabled="formType === 2"
placeholder="请选择项目部"
noChildrenText="没有数据了"
noResultsText="没有搜索结果"
@ -223,6 +225,7 @@ export default {
default: () => {},
},
// 1: 2:
formType: {
type: Number,
default: 1,

View File

@ -307,7 +307,6 @@ export default {
const subCompany = await getSubCompanySelectListCommonFun()
const mainProject = await getMainProjectListCommonFun()
const lotProject = await getLotProjectSelectListCommonFun()
console.log('lotProject', lotProject)
formLabel.forEach((item) => {
if (item.f_model === 'subComId') {

View File

@ -18,31 +18,31 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="法定代表人" prop="legalRepresentative">
<el-form-item label="法定代表人" prop="legalPerson">
<el-input
clearable
placeholder="请输入法定代表人"
v-model="addOrEditForm.legalRepresentative"
v-model="addOrEditForm.legalPerson"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="法人联系电话" prop="phone">
<el-form-item label="法人联系电话" prop="legalPersonPhone">
<el-input
clearable
placeholder="请输入法人联系电话"
v-model="addOrEditForm.phone"
v-model="addOrEditForm.legalPersonPhone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="营业住址" prop="businessAddress">
<el-form-item label="营业住址" prop="subAddress">
<el-input
clearable
placeholder="请输入营业住址"
v-model="addOrEditForm.businessAddress"
v-model="addOrEditForm.subAddress"
/>
</el-form-item>
</el-col>
@ -51,32 +51,30 @@
<el-row>
<el-col :span="12">
<el-form-item label="营业执照" prop="businessLicense">
<UploadImg
:limit="30"
<UploadImgFormData
:limit="1"
: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
addOrEditForm.businessLicense.length >= 1
"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电子公章" prop="electronicStamp">
<UploadImg
:limit="30"
<UploadImgFormData
:limit="1"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl"
:file-list.sync="addOrEditForm.electronicStamp"
:is-uploaded="
addOrEditForm.electronicStamp.length >= 2
addOrEditForm.electronicStamp.length >= 1
"
/>
</el-form-item>
@ -85,13 +83,12 @@
<el-row>
<el-col :span="12">
<el-form-item label="身份证正反面" prop="idCard">
<UploadImg
:limit="30"
<UploadImgFormData
:limit="2"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl"
:file-list.sync="addOrEditForm.idCard"
:is-uploaded="addOrEditForm.idCard.length >= 2"
/>
@ -102,16 +99,15 @@
label="电子签名/法人印章"
prop="electronicSignature"
>
<UploadImg
:limit="30"
<UploadImgFormData
:limit="1"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl"
:file-list.sync="addOrEditForm.electronicSignature"
:is-uploaded="
addOrEditForm.electronicSignature.length >= 2
addOrEditForm.electronicSignature.length >= 1
"
/>
</el-form-item>
@ -122,15 +118,12 @@
</template>
<script>
import UploadImg from '@/components/UploadImg'
import {
addSubBaseInfoAPI,
editSubBaseInfoAPI,
} from '@/api/basic-manage/sub-manage/sub-base-info'
import UploadImgFormData from '@/components/UploadImgFormData'
import { addAndEditSubBaseInfoAPI } from '@/api/basic-manage/sub-manage/sub-base-info'
export default {
name: 'AddOrEditForm',
components: {
UploadImg,
UploadImgFormData,
},
data() {
return {
@ -139,9 +132,10 @@ export default {
process.env.VUE_APP_BASE_API + '/system/file/uploadFiles',
addOrEditForm: {
subName: '', //
legalRepresentative: '', //
phone: '', //
businessAddress: '', //
legalPerson: '', //
legalPersonPhone: '', //
subAddress: '', //
id: null, // id
businessLicense: [], //
electronicStamp: [], //
@ -157,7 +151,7 @@ export default {
},
],
legalRepresentative: [
legalPerson: [
{
required: true,
message: '请输入法定代表人',
@ -165,6 +159,17 @@ export default {
},
],
legalPersonPhone: [
{
required: false,
},
{
pattern: /^1[3-9]\d{9}$/,
message: '请输入正确的手机号码',
trigger: 'blur',
},
],
businessLicense: [
{
required: true,
@ -204,16 +209,80 @@ export default {
if (valid) {
console.log(this.addOrEditForm)
const API =
this.formType === 1
? addSubBaseInfoAPI
: editSubBaseInfoAPI
const res = await API(this.addOrEditForm)
//
const {
businessLicense,
electronicStamp,
idCard,
electronicSignature,
subName,
legalPerson,
legalPersonPhone,
subAddress,
id,
} = this.addOrEditForm
const formData = new FormData()
const params = {
subName,
legalPerson,
legalPersonPhone,
subAddress,
}
if (id) {
params.id = id
}
formData.append('params', JSON.stringify(params))
const fileMsg = []
businessLicense.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 1,
name: '分包商营业执照',
})
})
electronicStamp.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 2,
name: '分包商电子公章',
})
})
idCard.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 3,
name: '分包商身份证正反面',
})
})
electronicSignature.forEach((item) => {
formData.append('files', item.raw)
fileMsg.push({
type: 4,
name: '分包商电子签名/法人印章',
})
})
formData.append('fileMsg', JSON.stringify(fileMsg))
const res = await addAndEditSubBaseInfoAPI(formData)
console.log(res, '新增或修改结果')
if (res.code === 200) {
this.$modal.msgSuccess(
this.formType === 1 ? '新增成功' : '修改成功',
)
resolve()
} else {
reject(new Error(res.message))
this.$modal.msgError(res.meg)
reject(new Error(res.meg))
}
} else {
reject(new Error('表单验证失败'))

View File

@ -8,67 +8,22 @@ export const formLabel = [
]
export const columnsList = [
{ t_props: 'projectName', t_label: '分包商名称' },
{ t_props: 'xmb', t_label: '法定代表人' },
{ t_props: 'name', t_label: '联系电话' },
{ t_props: 'type', t_label: '营业住址' },
{ t_props: 'subName', t_label: '分包商名称' },
{ t_props: 'legalPerson', t_label: '法定代表人' },
{ t_props: 'legalPersonPhone', t_label: '联系电话' },
{ t_props: 'subAddress', t_label: '营业住址' },
{
t_props: 'businessLicense',
t_label: '营业执照',
t_slot: 'businessLicense',
},
{ t_props: 'idCard', t_label: '身份证', t_slot: 'idCard' },
{ t_label: '身份证', t_slot: 'idCard' },
{
t_props: 'electronicStamp',
t_label: '电子公章',
t_slot: 'electronicStamp',
t_slot: 'electronicSeal',
},
{
t_props: 'electronicSignature',
t_label: '电子签名/法人印章',
t_slot: 'electronicSignature',
},
]
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: '未上传',
t_slot: 'corporateSeal',
},
]

View File

@ -5,9 +5,8 @@
:formLabel="formLabel"
:showOperation="true"
:showRightTools="true"
ref="allProjectTableRef"
ref="subBaseInfoTableRef"
:columnsList="columnsList"
:testTableList="testTableList"
:request-api="getSubBaseInfoListAPI"
>
<template slot="btn" slot-scope="{ queryParams }">
@ -16,7 +15,7 @@
size="mini"
type="success"
icon="el-icon-download"
@click="onHandleExportAllProject(queryParams)"
@click="onHandleExportSubBaseInfo(queryParams)"
>
导出
</el-button>
@ -26,7 +25,7 @@
size="mini"
type="primary"
icon="el-icon-plus"
@click="onHandleAddOrEditAllProject(1, null)"
@click="onHandleAddOrEditSubBaseInfo(1, null)"
>
新增
</el-button>
@ -34,16 +33,6 @@
<!-- 标段工程数量 -->
<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="handle" slot-scope="{ data }">
@ -52,7 +41,7 @@
size="mini"
type="primary"
icon="el-icon-edit"
@click="onHandleAddOrEditAllProject(2, data)"
@click="onHandleAddOrEditSubBaseInfo(2, data)"
>
修改
</el-button>
@ -60,7 +49,7 @@
size="mini"
type="danger"
icon="el-icon-delete"
@click="onHandleDeleteAllProject(data)"
@click="onHandleDeleteSubBaseInfo(data)"
>
删除
</el-button>
@ -95,7 +84,7 @@
import TableModel from '@/components/TableModel'
import DialogModel from '@/components/DialogModel'
import AddOrEditForm from './add-or-edit-form'
import { formLabel, columnsList, dialogConfig, testTableList } from './config'
import { formLabel, columnsList, dialogConfig } from './config'
import {
deleteSubBaseInfoAPI,
getSubBaseInfoListAPI,
@ -113,7 +102,7 @@ export default {
formLabel,
columnsList,
dialogConfig,
testTableList,
getSubBaseInfoListAPI,
slots: {
@ -126,19 +115,19 @@ export default {
},
methods: {
//
onHandleExportAllProject(queryParams) {
onHandleExportSubBaseInfo(queryParams) {
console.log(queryParams, '导出')
},
//
onHandleAddOrEditAllProject(type, data) {
onHandleAddOrEditSubBaseInfo(type, data) {
this.dialogConfig.outerTitle =
type === 1 ? '新增标段工程' : '修改标段工程'
this.dialogConfig.outerVisible = true
},
//
onHandleDeleteAllProject(data) {
onHandleDeleteSubBaseInfo(data) {
this.$confirm('确定删除该工程吗?', '温馨提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@ -163,6 +152,8 @@ export default {
this.dialogConfig.outerTitle === '新增标段工程' ? 1 : 2
try {
await this.$refs.addOrEditFormContentRef.onHandleConfirmAddOrEditFun()
this.handleCloseDialogOuter()
this.$refs.subBaseInfoTableRef.getTableList()
} catch (error) {
console.log('表单提交失败', error)
}

View File

@ -26,16 +26,7 @@ export const formLabel = [
f_type: 'sel',
f_width: '180px',
isShow: false, // 是否展示label
f_selList: [
{
label: '工程1',
value: '1',
},
{
label: '工程2',
value: '2',
},
], // 工程列表
f_selList: [], // 工程列表
},
{
f_label: '分包',

View File

@ -84,13 +84,6 @@
style="width: 454px; height: 390px"
v-if="dialogConfig.outerTitle === '合同图片详情'"
/>
<!-- <AddOrEditForm
:workerId="workerId"
:contractId="contractId"
v-if="dialogConfig.outerTitle === '合同见证详情'"
/> -->
<ContractDetails
ref="contractDetailsRef"
:contractId="contractId"
@ -104,7 +97,10 @@
<script>
import DialogModel from '@/components/DialogModel'
import ContractDetails from './contract-details.vue' //
import { getContractDetailListAPI } from '@/api/construction-person/red-green-light-mange/contract-witness'
import {
getContractDetailListAPI,
getContractDetailLookFileAPI,
} from '@/api/construction-person/red-green-light-mange/contract-witness'
export default {
components: {
DialogModel,
@ -127,10 +123,7 @@ export default {
minHeight: '',
maxHeight: '',
},
contractImgList: [
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
], //
contractImgList: [], //
}
},
mounted() {
@ -147,7 +140,12 @@ export default {
},
//
onHandleViewContract(row) {
async onHandleViewContract(row) {
const { data: res } = await getContractDetailLookFileAPI(row.id)
this.contractImgList = res
.filter((item) => item.sourceType != 6)
.map((item) => item.lsUrl)
this.dialogConfig.outerTitle = '合同图片详情'
this.dialogConfig.outerWidth = '500px'
this.dialogConfig.minHeight = '500px'
@ -157,7 +155,6 @@ export default {
//
onHandleViewContractDetails(row) {
console.log(row, 'row 合同详情')
this.contractId = row.id
this.dialogConfig.outerTitle = '合同见证详情'
this.dialogConfig.outerWidth = '80%'

View File

@ -4,15 +4,19 @@
<el-descriptions border :column="2" :labelStyle="{ width: '200px' }">
<el-descriptions-item label="合同见证照片为:" :span="2">
<div class="contract-content">
<div :key="item" v-for="item in 5" class="contract-item">
<div
:key="item.id"
class="contract-item"
v-for="item in filesImgList"
>
<el-image
fit="cover"
style="width: 140px; height: 200px"
src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
style="width: 180px; height: 200px"
:src="item.lsUrl"
/>
<span class="tip-text" style="margin-top: 20px">
人员手持合同照片
{{ imgTitleEnum[item.sourceType] }}
</span>
</div>
</div>
@ -38,9 +42,14 @@
{{ contractInfo.wageCriterion }}
</el-descriptions-item>
<el-descriptions-item label="附件">
<el-tag size="small" style="margin-right: 10px">附件1</el-tag>
<el-tag size="small" style="margin-right: 10px">附件2</el-tag>
<el-tag size="small" style="margin-right: 10px">附件3</el-tag>
<el-tag
:key="item.id"
v-for="item in filesFileList"
@click="onHandlePreviewFile(item)"
style="margin-right: 10px; cursor: pointer"
>
{{ item.originFileName }}
</el-tag>
</el-descriptions-item>
</el-descriptions>
</div>
@ -68,6 +77,17 @@ export default {
wageApprovedWay: '',
wageCriterion: '',
},
filesImgList: [], //
filesFileList: [], //
imgTitleEnum: {
1: '人员手持合同照片',
2: '工作内容页',
3: '薪酬约定页',
4: '本人签名页',
5: '其他照片',
},
}
},
@ -76,7 +96,7 @@ export default {
async getContractInfo() {
const { data: res } = await getContractDetailAPI(this.contractId)
// this.contractInfo = res
console.log(res, 'res 合同信息')
if (res.length > 0) {
const {
contractCode,
@ -85,6 +105,7 @@ export default {
contractStopDate,
wageApprovedWay,
wageCriterion,
files,
} = res[0]
this.contractInfo = {
@ -95,8 +116,18 @@ export default {
wageApprovedWay,
wageCriterion,
}
this.filesImgList = files.filter((item) => item.sourceType != 6)
this.filesFileList = files.filter(
(item) => item.sourceType == 6,
)
}
},
//
onHandlePreviewFile(item) {
window.open(item.lsUrl, '_blank')
},
},
}
</script>

View File

@ -21,13 +21,16 @@
:limit="1"
:file-size="10"
:multiple="true"
v-if="item.type != 6"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:file-list.sync="item.fileList"
:file-type="['jpg', 'png', 'jpeg']"
:is-uploaded="item.fileList.length >= 1"
/>
<span> {{ item.title }} </span>
<span v-if="item.type != 6">
{{ item.title }}
</span>
</div>
</div>
</el-form-item>
@ -108,12 +111,22 @@
<el-row>
<el-col :span="24">
<el-form-item label="附件" prop="phone">
<!-- <el-input
clearable
placeholder="请输入附件"
v-model="contractInfoForm.phone"
/> -->
<el-form-item label="附件">
<UploadFileFormData
:limit="3"
:file-size="20"
:multiple="true"
uploadTip="身份证、银行卡扫描件,承诺书、劳动合同或用工协议扫描件"
:file-list.sync="contractImageList[5].fileList"
:file-type="[
'jpg',
'png',
'jpeg',
'pdf',
'doc',
'docx',
]"
/>
</el-form-item>
</el-col>
</el-row>
@ -124,6 +137,7 @@
<script>
import UploadImg from '@/components/UploadImg'
import UploadImgFormData from '@/components/UploadImgFormData'
import UploadFileFormData from '@/components/UploadFileFormData'
import {
uploadContractAPI,
getContractDetailAPI,
@ -152,6 +166,7 @@ export default {
components: {
UploadImg,
UploadImgFormData,
UploadFileFormData,
},
data() {
return {
@ -165,26 +180,6 @@ export default {
wageCriterion: '', //
},
addOrEditForm: {
name: '', //
idNumber: '', //
sex: '', //
birthday: '', //
nation: '', //
issuingAuthority: '', //
startTime: '', //
endTime: '', //
address: '', //
subName: '', //
legalRepresentative: '', //
phone: '', //
businessAddress: '', //
businessLicense: [], //
electronicStamp: [], //
idCard: [], //
electronicSignature: [], // /
},
contractImageList: [
{
title: '人员手持合同照',
@ -211,48 +206,205 @@ export default {
type: 5,
fileList: [],
},
{
title: '附件',
type: 6,
fileList: [],
},
],
}
},
methods: {
//
checkFormStatus() {
//
const fieldsList = [
'contractCode', //
'contractStartDate', //
'contractStopDate', //
'wageCriterion', //
]
const imageFieldsToCheck = this.contractImageList.slice(0, -1) //
//
let emptyFieldCount = 0
let filledFieldCount = 0
//
fieldsList.forEach((field) => {
if (!this.contractInfoForm[field]) {
emptyFieldCount++
} else {
filledFieldCount++
}
})
//
imageFieldsToCheck.forEach((item) => {
if (item.fileList.length === 0) {
emptyFieldCount++
} else {
filledFieldCount++
}
})
//
if (
emptyFieldCount ===
fieldsList.length + imageFieldsToCheck.length
) {
return 'all_empty' //
} else if (
filledFieldCount ===
fieldsList.length + imageFieldsToCheck.length
) {
return 'all_filled' //
} else {
return 'partial' //
}
},
//
onHandleConfirmAddOrEditFun() {
return new Promise(async (resolve, reject) => {
console.log(this.contractImageList, 'contractImageList')
// return new Promise(async (resolve, reject) => {
// const status = this.checkFormStatus()
// if (status === 'all_filled') {
// params.bmWorkerContract = this.contractInfoForm
// }
const params = {
// if (status === 'partial') {
// this.$modal.msgError(
// '',
// )
// return reject(new Error(''))
// }
// if (status === 'all_empty') {
// await new Promise((resolve, reject) => {
// this.$confirm(
// '',
// '',
// )
// .then(() => {
// resolve()
// })
// .catch(() => {
// reject()
// })
// })
// .then(() => {
// return resolve()
// })
// .catch(() => {
// return reject()
// })
// }
// const params = {
// ...this.contractInfoForm,
// workerId: this.workerId,
// }
// // ()
// if (this.queryDetailsId) {
// params.id = this.queryDetailsId
// }
// const filesList = []
// const formData = new FormData()
// this.contractImageList.forEach((item) => {
// item.fileList.forEach((file) => {
// filesList.push({
// type: item.type,
// name: 'contract',
// })
// formData.append('files', file.raw)
// })
// })
// formData.append('params', JSON.stringify(params))
// formData.append('fileMsg', JSON.stringify(filesList))
// const res = await uploadContractAPI(formData)
// console.log(res, 'res ')
// if (res.code === 200) {
// this.$modal.msgSuccess('')
// resolve()
// } else {
// this.$modal.msgError(res.msg)
// reject()
// }
// })
return new Promise(async (resolve, reject) => {
const status = this.checkFormStatus()
// 1. params
let params = {
...this.contractInfoForm,
workerId: this.workerId,
}
// ()
// ID
if (this.queryDetailsId) {
params.id = this.queryDetailsId
}
//
if (status === 'all_filled') {
params.bmWorkerContract = this.contractInfoForm
}
//
if (status === 'partial') {
this.$modal.msgError(
'请完善合同见证中的必填信息(除附件外)后再提交',
)
return reject(new Error('合同信息未完善'))
}
//
if (status === 'all_empty') {
await new Promise((innerResolve, innerReject) => {
this.$confirm(
'当前合同信息为空,确定后将关闭该上传页面',
'温馨提示',
)
.then(() => innerResolve())
.catch(() => innerReject())
})
.then(() => resolve('isClose'))
.catch(() => reject())
return
}
// all_filled
const filesList = []
const formData = new FormData()
this.contractImageList.forEach((item) => {
item.fileList.forEach((file) => {
filesList.push({
type: item.type,
name: 'contract',
})
filesList.push({ type: item.type, name: 'contract' })
formData.append('files', file.raw)
})
})
formData.append('params', JSON.stringify(params))
formData.append('fileMsg', JSON.stringify(filesList))
const res = await uploadContractAPI(formData)
console.log(res, 'res 合同上传')
if (res.code === 200) {
this.$modal.msgSuccess('合同上传成功')
resolve()
} else {
this.$modal.msgError(res.msg)
reject()
// 3. APIreject
try {
const res = await uploadContractAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('合同上传成功')
resolve()
} else {
this.$modal.msgError(res.msg)
reject()
}
} catch (err) {
this.$modal.msgError('合同上传失败,请重试')
reject(err)
}
})
},

View File

@ -60,7 +60,6 @@
size="mini"
type="primary"
icon="el-icon-upload"
v-if="data.einStatus == 1"
@click="onHandleUploadContract(data)"
>
上传
@ -104,11 +103,6 @@
</template>
<template v-if="dialogConfig.outerTitle === '合同图片详情'">
<!-- <el-image
:src="dialogConfig.outerImgUrl"
fit="contain"
style="width: 100%; height: 100%"
/> -->
<el-image
:src="contractImgList[0]"
:preview-src-list="contractImgList"
@ -126,7 +120,12 @@ import DialogModel from '@/components/DialogModel'
import ContractWitnessUpload from './contract-witness-upload' //
import ContractDetailsList from './contract-details-list.vue' //
import { formLabel, columnsList, dialogConfig } from './config'
import { getPersonContractListAPI } from '@/api/construction-person/red-green-light-mange/contract-witness'
import {
getPersonContractListAPI,
getContractDetailLookFileAPI,
} from '@/api/construction-person/red-green-light-mange/contract-witness'
import { getLotProjectSelectListCommonFun } from '@/utils/getCommonData'
export default {
name: 'ContractWitness',
components: {
@ -154,10 +153,7 @@ export default {
electronicSignature: 'electronicSignature',
},
contractImgList: [
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
], //
contractImgList: [], //
}
},
methods: {
@ -214,7 +210,7 @@ export default {
//
onHandleUploadContract(data) {
console.log(data, '上传合同')
// this.queryDetailsId = data.id
this.queryDetailsId = data.id
if (data.isSign == 1) {
this.$confirm(
'当前已上传合同信息,是否要重新上传,重新上传将会覆盖原数据?',
@ -233,9 +229,9 @@ export default {
this.dialogConfig.maxHeight = ''
this.dialogConfig.outerWidth = '80%'
this.dialogConfig.outerVisible = true
this.$nextTick(() => {
this.$refs.uploadContractContentRef.getContractDetail()
})
// this.$nextTick(() => {
// this.$refs.uploadContractContentRef.getContractDetail()
// })
})
.catch(() => {})
} else {
@ -260,7 +256,11 @@ export default {
},
//
onHandleViewContractImgDetails(data) {
async onHandleViewContractImgDetails(data) {
const { data: res } = await getContractDetailLookFileAPI(data.id)
this.contractImgList = res
.filter((item) => item.sourceType != 6)
.map((item) => item.lsUrl)
this.dialogConfig.outerTitle = '合同图片详情'
this.dialogConfig.minHeight = '500px'
this.dialogConfig.maxHeight = '500px'
@ -271,8 +271,11 @@ export default {
//
async onHandleConfirmAddOrEdit() {
try {
await this.$refs.uploadContractContentRef.onHandleConfirmAddOrEditFun()
this.$refs.personEntryTableRef.getTableList()
const res =
await this.$refs.uploadContractContentRef.onHandleConfirmAddOrEditFun()
if (res !== 'isClose') {
this.$refs.personEntryTableRef.getTableList()
}
this.handleCloseDialogOuter()
} catch (error) {
console.log('表单提交失败', error)
@ -284,5 +287,20 @@ export default {
this.dialogConfig.outerVisible = false
},
},
async created() {
//
const lotProject = await getLotProjectSelectListCommonFun()
formLabel.forEach((item) => {
if (item.f_model === 'proId') {
item.f_selList = lotProject.map((item) => {
return {
label: item.proName,
value: item.id,
}
})
}
})
},
}
</script>

View File

@ -40,17 +40,21 @@
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent"> 996 </template>
<template slot="outerContent">
<ProjectList />
</template>
</DialogModel>
</div>
</template>
<script>
import DialogModel from '@/components/DialogModel'
import ProjectList from './project-list.vue'
export default {
name: 'RedAndGreenCount',
components: {
DialogModel,
ProjectList,
},
data() {
return {

View File

@ -0,0 +1,145 @@
<template>
<div>
<TableModel
:formLabel="formLabel"
:showOperation="false"
:showRightTools="false"
ref="projectListTableRef"
:columnsList="columnsList"
:testTableList="testTableList"
:request-api="getRedAndGreenCountProjectListAPI"
>
<template slot="proName" slot-scope="{ data }">
<span @click="onHandleClickProName(data)" class="cursor-blue">
{{ data.proName }}
</span>
</template>
</TableModel>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<TableModel
:formLabel="formLabel_1"
:showOperation="false"
:showRightTools="false"
ref="projectListTableRef"
:columnsList="columnsList_1"
:testTableList="testTableList"
:request-api="getRedAndGreenCountProjectListAPI"
/>
</template>
</DialogModel>
</div>
</template>
<script>
import TableModel from '@/components/TableModel'
import DialogModel from '@/components/DialogModel'
import { getRedAndGreenCountProjectListAPI } from '@/api/construction-person/red-green-light-mange/red-and-green-count'
export default {
name: 'ProjectList',
components: {
TableModel,
DialogModel,
},
data() {
return {
getRedAndGreenCountProjectListAPI,
formLabel: [
{
f_label: '工程名称',
f_model: 'proName',
f_type: 'ipt',
f_width: '180px',
isShow: false, // label
},
],
columnsList: [
{ t_slot: 'proName', t_label: '工程名称' },
{ t_props: 'onSiteCount', t_label: '在场人数' },
{ t_props: 'yellowCount', t_label: '黄灯人数' },
{ t_props: 'greenCount', t_label: '绿灯人数' },
],
testTableList: [
{
proName: '工程1',
onSiteCount: '6',
yellowCount: '12',
greenCount: '23',
},
{
proName: '工程1',
onSiteCount: '20',
yellowCount: '10',
greenCount: '10',
},
],
dialogConfig: {
outerTitle: '人员',
outerVisible: false,
outerWidth: '80%',
minHeight: '90vh',
maxHeight: '90vh',
},
formLabel_1: [
{
f_label: '姓名',
f_model: 'proName',
f_type: 'ipt',
f_width: '180px',
isShow: false, // label
},
{
f_label: '分包',
f_model: 'proName',
f_type: 'ipt',
f_width: '180px',
isShow: false, // label
},
{
f_label: '班组',
f_model: 'proName',
f_type: 'ipt',
f_width: '180px',
isShow: false, // label
},
{
f_label: '状态',
f_model: 'proName',
f_type: 'ipt',
f_width: '180px',
isShow: false, // label
},
],
columnsList_1: [
{ t_slot: 'proName', t_label: '姓名' },
{ t_props: 'onSiteCount', t_label: '身份证' },
{ t_props: 'yellowCount', t_label: '联系方式' },
{ t_props: 'greenCount', t_label: '工种' },
{ t_props: 'greenCount', t_label: '所属工程' },
{ t_props: 'greenCount', t_label: '所属分包' },
{ t_props: 'greenCount', t_label: '所属班组' },
{ t_props: 'greenCount', t_label: '状态' },
],
}
},
methods: {
//
onHandleClickProName(data) {
this.dialogConfig.outerVisible = true
},
//
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
},
}
</script>
<style></style>