代码完善

This commit is contained in:
BianLzhaoMin 2025-08-14 14:59:21 +08:00
parent c2aa920725
commit b50e6f9305
10 changed files with 794 additions and 66 deletions

View File

@ -3,16 +3,7 @@ import request from '@/utils/request'
// 新增和修改标段工程
export const addAndEditLotLotProjectAPI = (data) => {
return request({
url: '/bmw/pmOrg/addOrUpdateProject',
method: 'POST',
data,
})
}
// 修改标段工程
export const editLotLotProjectAPI = (data) => {
return request({
url: '/project/***',
url: '/bmw/pmProject/addOrUpdateProject',
method: 'POST',
data,
})
@ -29,7 +20,7 @@ export const deleteLotLotProjectAPI = (id) => {
// 获取标段工程列表
export const getLotLotProjectListAPI = (data) => {
return request({
url: '/project/***',
url: '/bmw/pmProject/list',
method: 'GET',
params: data,
})

View File

@ -188,6 +188,8 @@ export default {
//
handleChange(file, fileList) {
console.log(file, fileList, 'file, fileList')
this.$emit('update:fileList', fileList)
},
},

View File

@ -197,6 +197,12 @@ import { getMainProjectListCommonFun } from '@/utils/getCommonData'
export default {
name: 'AddOrEditForm',
dicts: ['project_status', 'project_type', 'voltage_level'],
props: {
editFormData: {
type: Object,
default: () => {},
},
},
data() {
//
const validatePlanEndTime = (rule, value, callback) => {
@ -226,8 +232,8 @@ export default {
proStatus: '0', // 0
proAddress: '', //
startTime: '', //
endTime: '', //
startTime: null, //
endTime: null, //
lon: '', //
lat: '', //
},
@ -365,18 +371,24 @@ export default {
if (valid) {
console.log(this.addOrEditForm)
// const API =
// this.formType === 1
// ? addLotLotProjectAPI
// : editLotLotProjectAPI
const params = {
...this.addOrEditForm,
}
if (this.formType === 1) {
delete params.id
}
const res = await addAndEditLotLotProjectAPI(
this.addOrEditForm,
)
console.log(res, '新增或修改结果')
if (res.code === 200) {
resolve()
this.$modal.msgSuccess('新增成功')
} else {
reject(new Error(res.message))
reject(new Error(res.msg))
this.$modal.msgError(res.msg)
}
} else {
reject(new Error('表单验证失败'))
@ -390,5 +402,52 @@ export default {
this.$refs.addOrEditFormRef.resetFields()
},
},
watch: {
editFormData: {
handler(newVal) {
if (Object.keys(newVal).length > 0) {
// this.addOrEditForm = newVal
console.log(newVal, 'newVal')
const {
mainProId,
orgId,
proName,
simpleName,
proType,
volLevel,
isShanghai,
proStatus,
proAddress,
startTime,
endTime,
lon,
lat,
id,
} = newVal
this.addOrEditForm = {
mainProId,
orgId,
proName,
simpleName,
proType,
volLevel,
isShanghai,
proStatus,
proAddress,
startTime,
endTime,
lon,
lat,
id,
}
}
},
deep: true,
immediate: true,
},
},
}
</script>

View File

@ -32,8 +32,8 @@ export const formLabel = [
]
export const columnsList = [
{ t_props: 'projectName', t_label: '所属总工程' },
{ t_props: 'xmb', t_label: '所属项目部' },
{ t_props: 'mainProName', t_label: '所属总工程' },
{ t_props: 'orgName', t_label: '所属项目部' },
{ t_props: 'proName', t_label: '工程名称' },
{ t_props: 'proType', t_label: '工程类型' },
{ t_props: 'volLevel', t_label: '电压等级' },
@ -41,36 +41,6 @@ export const columnsList = [
{ t_props: 'proStatus', t_label: '状态' },
]
export const testTableList = [
{
projectName: '总工程名称',
level: '等级3',
xmb: 'xxx项目部',
name: '110kv工程',
type: '基建变电',
address: '安徽省合肥市110k工程',
status: '在建',
},
{
projectName: '总工程名称21',
level: '等级3',
xmb: 'xxx项目部',
name: '110kv工程',
type: '基建变电',
address: '安徽省合肥市110k工程',
status: '在建',
},
{
projectName: '总工程名称3',
level: '等级3',
xmb: 'xxx项目部',
name: '110kv工程',
type: '基建变电',
address: '安徽省合肥市110k工程',
status: '在建',
},
]
export const dialogConfig = {
outerVisible: false,
outerTitle: '',

View File

@ -5,9 +5,8 @@
:formLabel="formLabel"
:showOperation="true"
:showRightTools="true"
ref="allProjectTableRef"
ref="lotProjectTableRef"
:columnsList="columnsList"
:testTableList="testTableList"
:request-api="getLotLotProjectListAPI"
>
<template slot="btn" slot-scope="{ queryParams }">
@ -78,7 +77,10 @@
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<AddOrEditForm ref="addOrEditFormContentRef" />
<AddOrEditForm
:editFormData="editFormData"
ref="addOrEditLotProjectFormRef"
/>
<el-row class="dialog-footer-btn">
<el-button size="medium" @click="handleCloseDialogOuter">
@ -101,7 +103,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 {
deleteLotLotProjectAPI,
getLotLotProjectListAPI,
@ -120,7 +122,8 @@ export default {
formLabel,
columnsList,
dialogConfig,
testTableList,
editFormData: {},
getLotLotProjectListAPI,
}
},
@ -134,6 +137,43 @@ export default {
onHandleAddOrEditAllProject(type, data) {
this.dialogConfig.outerTitle =
type === 1 ? '新增标段工程' : '修改标段工程'
if (type === 2) {
const {
mainProId,
orgId,
proName,
simpleName,
proType,
volLevel,
isShanghai,
proStatus,
proAddress,
startTime,
endTime,
lon,
lat,
id,
} = data
this.editFormData = {
mainProId,
orgId,
proName,
simpleName,
proType,
volLevel,
isShanghai,
proStatus,
proAddress,
startTime,
endTime,
lon,
lat,
id,
}
} else {
this.editFormData = {}
}
this.dialogConfig.outerVisible = true
},
@ -203,10 +243,12 @@ export default {
//
async onHandleConfirmAddOrEdit() {
this.$refs.addOrEditFormContentRef.formType =
this.dialogConfig.outerTitle === '新增标段工程' ? 1 : 2
// this.$refs.addOrEditLotProjectFormRef.formType =
// this.dialogConfig.outerTitle === '' ? 1 : 2
try {
await this.$refs.addOrEditFormContentRef.onHandleConfirmAddOrEditFun()
await this.$refs.addOrEditLotProjectFormRef.onHandleConfirmAddOrEditFun()
this.handleCloseDialogOuter()
this.$refs.lotProjectTableRef.getTableList() //
} catch (error) {
console.log('表单提交失败', error)
}
@ -214,7 +256,7 @@ export default {
//
handleCloseDialogOuter() {
this.$refs.addOrEditFormContentRef.resetForm()
this.$refs.addOrEditLotProjectFormRef.resetForm()
this.dialogConfig.outerVisible = false
},
},

View File

@ -0,0 +1,331 @@
<template>
<!-- 新增或修改标段工程表单 -->
<div>
<!-- 合同信息表单 -->
<el-form
label-width="140px"
ref="contractInfoFormRef"
:model="contractInfoForm"
>
<el-row>
<el-col :span="24">
<el-form-item label="合同见证照片" prop="businessLicense">
<div style="display: flex; gap: 10px">
<div
class="contract-img-box"
v-for="item in contractImageList"
:key="item.title"
>
<UploadImgFormData
:key="item.title"
:limit="1"
:file-size="10"
:multiple="true"
:is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']"
:file-list.sync="item.fileList"
:is-uploaded="item.fileList.length >= 1"
/>
<span> {{ item.title }} </span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="合同编号" prop="contractCode">
<el-input
clearable
placeholder="请输入合同编号"
v-model="contractInfoForm.contractCode"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同期限类型" prop="contractTermType">
<el-radio-group
size="mini"
v-model="contractInfoForm.contractTermType"
>
<el-radio-button
label="以完成一定工作为期限的合同"
/>
<el-radio-button label="固定期限合同" />
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="合同签订日期" prop="contractStartDate">
<el-date-picker
type="date"
style="width: 100%"
value-format="yyyy-MM-dd"
placeholder="请选择合同签订日期"
v-model="contractInfoForm.contractStartDate"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同终止日期" prop="contractStopDate">
<el-date-picker
type="date"
style="width: 100%"
value-format="yyyy-MM-dd"
placeholder="请选择合同终止日期"
v-model="contractInfoForm.contractStopDate"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="工资核定方式" prop="wageApprovedWay">
<el-radio-group
size="mini"
v-model="contractInfoForm.wageApprovedWay"
>
<el-radio-button label="天" />
<el-radio-button label="月" />
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工资核定标准" prop="wageCriterion">
<el-input
clearable
placeholder="请输入工资核定标准"
v-model="contractInfoForm.wageCriterion"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="附件" prop="phone">
<!-- <el-input
clearable
placeholder="请输入附件"
v-model="contractInfoForm.phone"
/> -->
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import UploadImg from '@/components/UploadImg'
import UploadImgFormData from '@/components/UploadImgFormData'
import {
uploadContractAPI,
getContractDetailAPI,
} from '@/api/construction-person/red-green-light-mange/contract-witness'
export default {
name: 'AddOrEditForm',
props: {
queryDetailsId: {
type: [String, Number],
default: '',
},
einStatus: {
type: [String, Number],
default: '',
},
formType: {
type: Number,
default: 1,
},
workerId: {
type: [String, Number],
default: '', // id
},
},
components: {
UploadImg,
UploadImgFormData,
},
data() {
return {
//
contractInfoForm: {
contractCode: '', //
contractTermType: '以完成一定工作为期限的合同', //
contractStartDate: '', //
contractStopDate: '', //
wageApprovedWay: '天', //
wageCriterion: '', //
},
addOrEditForm: {
name: '', //
idNumber: '', //
sex: '', //
birthday: '', //
nation: '', //
issuingAuthority: '', //
startTime: '', //
endTime: '', //
address: '', //
subName: '', //
legalRepresentative: '', //
phone: '', //
businessAddress: '', //
businessLicense: [], //
electronicStamp: [], //
idCard: [], //
electronicSignature: [], // /
},
contractImageList: [
{
title: '人员手持合同照',
type: 1,
fileList: [],
},
{
title: '工作内容页',
type: 2,
fileList: [],
},
{
title: '薪酬约定页',
type: 3,
fileList: [],
},
{
title: '本人签名页',
type: 4,
fileList: [],
},
{
title: '其他照片',
type: 5,
fileList: [],
},
],
}
},
methods: {
//
onHandleConfirmAddOrEditFun() {
return new Promise(async (resolve, reject) => {
console.log(this.contractImageList, 'contractImageList')
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()
}
})
},
//
onChangeProId(val) {
this.keyInfoForm.proName = this.proSelectList.find(
(item) => item.value === val,
).label
},
//
onChangePostId(val) {
this.keyInfoForm.postName = this.postSelectList.find(
(item) => item.value === val,
).label
},
//
onChangeSubId(val) {
this.keyInfoForm.subName = this.subSelectList.find(
(item) => item.value === val,
).label
},
//
onChangeTeamId(val) {
this.keyInfoForm.teamName = this.teamSelectList.find(
(item) => item.value === val,
).label
},
//
resetForm() {},
//
async getContractDetail() {
console.log(this.queryDetailsId, 'queryDetailsId 合同详情')
const { data: res } = await getContractDetailAPI(
this.queryDetailsId,
)
if (res.length > 0) {
const {
contractCode,
contractTermType,
contractStartDate,
contractStopDate,
wageApprovedWay,
wageCriterion,
} = res[0]
this.contractInfoForm = {
contractCode,
contractTermType,
contractStartDate,
contractStopDate,
wageApprovedWay,
wageCriterion,
}
}
},
},
}
</script>
<style lang="scss" scoped>
@import '@/assets/styles/variables.scss';
.contract-img-box {
display: flex;
align-items: center;
flex-direction: column;
span {
font-size: 14px;
color: $red;
}
}
</style>

View File

@ -74,7 +74,7 @@
>
<template slot="outerContent">
<template v-if="dialogConfig.outerTitle === '合同见证'">
<AddOrEditForm
<ContractWitnessUpload
:formType="formType"
:workerId="workerId"
:einStatus="einStatus"
@ -123,7 +123,7 @@
<script>
import TableModel from '@/components/TableModel'
import DialogModel from '@/components/DialogModel'
import AddOrEditForm from './add-or-edit-form' //
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'
@ -132,8 +132,8 @@ export default {
components: {
TableModel,
DialogModel,
AddOrEditForm,
ContractDetailsList,
ContractWitnessUpload,
},
data() {

View File

@ -0,0 +1,79 @@
export const formLabel = [
{
f_label: '姓名',
f_model: 'name',
f_type: 'ipt',
f_width: '180px',
isShow: false, // 是否展示label
},
{
f_label: '身份证',
f_model: 'idNumber',
f_type: 'ipt',
f_width: '180px',
isShow: false, // 是否展示label
},
{
f_label: '联系方式',
f_model: 'phone',
f_type: 'ipt',
f_width: '180px',
isShow: false, // 是否展示label
},
{
f_label: '银行卡号',
f_model: 'phone',
f_type: 'ipt',
f_width: '180px',
isShow: false, // 是否展示label
},
{
f_label: '状态',
f_model: 'einStatus',
f_type: 'sel',
f_width: '180px',
isShow: false, // 是否展示label
f_selList: [
{
label: '已上传',
value: '1',
},
{
label: '未上传',
value: '2',
},
], // 状态列表
},
]
export const columnsList = [
{ t_props: 'name', t_label: '姓名' },
{ t_props: 'idNumber', t_label: '身份证' },
{ t_props: 'contractCode', t_label: '联系方式' },
{ t_props: 'proName', t_label: '银行卡号' },
{
t_props: 'subName',
t_label: '银行名称',
},
{ t_props: 'teamName', t_label: '银行支行名称' },
{
t_label: '工资卡见证',
t_slot: 'view',
},
{
t_label: '状态',
t_slot: 'isSign',
},
{
t_props: 'updateTime',
t_label: '更新时间',
},
]
export const dialogConfig = {
outerVisible: false,
outerTitle: '',
outerWidth: '80%',
minHeight: '',
maxHeight: '',
}

View File

@ -1,11 +1,265 @@
<template>
<!-- 施工人员 ---- 红绿灯管理 ---- 工资卡见证 -->
<div class="app-container">
<h1>工资卡见证</h1>
<TableModel
:formLabel="formLabel"
:showOperation="true"
:showRightTools="true"
:columnsList="columnsList"
ref="wageCardWitnessTableRef"
:request-api="getPersonContractListAPI"
>
<template slot="btn" slot-scope="{ queryParams }">
<el-button
plain
size="mini"
type="success"
icon="el-icon-download"
@click="onHandleExportWageCard(queryParams)"
>
导出
</el-button>
</template>
<!-- 上传状态 -->
<template slot="isSign" slot-scope="{ data }">
<el-tag size="mini" type="danger" v-if="data.isSign == 0">
未上传
</el-tag>
<el-tag size="mini" type="success" v-if="data.isSign == 1">
已上传
</el-tag>
</template>
<!-- 查看 -->
<template slot="view" slot-scope="{ data }">
<el-button
size="mini"
type="text"
@click="onHandleViewWageCardImg(data)"
>
查看
</el-button>
</template>
<template slot="handle" slot-scope="{ data }">
<!-- <el-button
plain
size="mini"
type="primary"
icon="el-icon-edit"
@click="onHandleViewContractDetailsList(data)"
>
详情
</el-button> -->
<el-button
plain
size="mini"
type="primary"
icon="el-icon-upload"
v-if="data.einStatus == 1"
@click="onHandleUploadWageCard(data)"
>
修改
</el-button>
</template>
</TableModel>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<template v-if="dialogConfig.outerTitle === '工资卡见证'">
<WageCardUpload
:formType="formType"
:workerId="workerId"
:einStatus="einStatus"
ref="uploadContractContentRef"
:queryDetailsId="queryDetailsId"
/>
<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>
<template v-if="dialogConfig.outerTitle === '工资卡图片详情'">
<el-image
:src="contractImgList[0]"
:preview-src-list="contractImgList"
style="width: 454px; height: 390px"
/>
</template>
</template>
</DialogModel>
</div>
</template>
<script>
export default {}
</script>
import TableModel from '@/components/TableModel'
import DialogModel from '@/components/DialogModel'
import WageCardUpload from './wage-card-upload' //
import { formLabel, columnsList, dialogConfig } from './config'
import { getPersonContractListAPI } from '@/api/construction-person/red-green-light-mange/contract-witness'
export default {
name: 'WageCardWitness',
components: {
TableModel,
DialogModel,
WageCardUpload,
},
<style></style>
data() {
return {
formLabel,
columnsList,
dialogConfig,
getPersonContractListAPI,
queryDetailsId: '', // id
einStatus: 1, //
formType: 1, //
workerId: '', // id
slots: {
businessLicense: 'businessLicense',
idCard: 'idCard',
electronicStamp: 'electronicStamp',
electronicSignature: 'electronicSignature',
},
contractImgList: [
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
], //
}
},
methods: {
//
onHandleExportWageCard(queryParams) {
console.log(queryParams, '导出参数')
// this.download(
// '/xxx/xxx',
// {
// ...queryParams,
// },
// '.xlsx',
// )
},
//
onHandleAddOrEditPersonEntry(type, data) {
this.dialogConfig.outerTitle = type === 1 ? '新增人员' : '修改人员'
this.formType = type
if (type === 2) {
this.queryDetailsId = data.id
this.einStatus = data.einStatus
this.dialogConfig.outerVisible = true
this.$nextTick(() => {
this.$refs.uploadContractContentRef.getEntryPersonDetail()
})
} else {
this.dialogConfig.outerVisible = true
}
},
//
onHandleDeletePersonEntry(data) {
this.$confirm('确定删除该人员吗?', '温馨提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(async () => {
const res = await deleteEntryPersonAPI({
id: data.id,
})
if (res.code === 200) {
this.$modal.msgSuccess('删除成功')
this.$refs.wageCardWitnessTableRef.getTableList() //
}
})
.catch(() => {
console.log('取消')
})
},
//
onHandleUploadWageCard(data) {
console.log(data, '上传工资卡')
// this.queryDetailsId = data.id
if (data.isSign == 1) {
this.$confirm(
'当前已上传工资卡信息,是否要重新上传,重新上传将会覆盖原数据?',
'温馨提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
},
)
.then(async () => {
this.workerId = data.workerId
this.queryDetailsId = data.id
this.dialogConfig.outerTitle = '工资卡见证'
this.dialogConfig.minHeight = ''
this.dialogConfig.maxHeight = ''
this.dialogConfig.outerWidth = '80%'
this.dialogConfig.outerVisible = true
this.$nextTick(() => {
this.$refs.uploadContractContentRef.getContractDetail()
})
})
.catch(() => {})
} else {
this.workerId = data.workerId
this.queryDetailsId = ''
this.dialogConfig.outerTitle = '工资卡见证'
this.dialogConfig.minHeight = ''
this.dialogConfig.maxHeight = ''
this.dialogConfig.outerWidth = '80%'
this.dialogConfig.outerVisible = true
}
},
//
onHandleViewWageCardImg(data) {
this.dialogConfig.outerTitle = '工资卡图片详情'
this.dialogConfig.minHeight = '500px'
this.dialogConfig.maxHeight = '500px'
this.dialogConfig.outerWidth = '500px'
this.dialogConfig.outerVisible = true
},
//
async onHandleConfirmAddOrEdit() {
try {
await this.$refs.uploadContractContentRef.onHandleConfirmAddOrEditFun()
this.$refs.wageCardWitnessTableRef.getTableList()
this.handleCloseDialogOuter()
} catch (error) {
console.log('表单提交失败', error)
}
},
//
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
},
}
</script>