总包工程接口完善以及公共方法封装

This commit is contained in:
BianLzhaoMin 2025-08-14 13:48:14 +08:00
parent 2c12fe55ac
commit c2aa920725
16 changed files with 565 additions and 186 deletions

View File

@ -1,9 +1,9 @@
import request from '@/utils/request' import request from '@/utils/request'
// 新增标段工程 // 新增和修改标段工程
export const addLotLotProjectAPI = (data) => { export const addAndEditLotLotProjectAPI = (data) => {
return request({ return request({
url: '/project/***', url: '/bmw/pmOrg/addOrUpdateProject',
method: 'POST', method: 'POST',
data, data,
}) })

View File

@ -9,3 +9,10 @@ export function getCompanySelectListAPI() {
method: 'get', method: 'get',
}) })
} }
// 获取总包工程列表
export function getMainProjectListAllAPI() {
return request({
url: '/bmw/mainProject/listAll',
method: 'get',
})
}

View File

@ -1,8 +1,9 @@
import request from '@/utils/request' import request from '@/utils/request'
import requestFormData from '@/utils/request_formdata'
// 人员入场 新增人员接口 // 人员入场 新增人员接口
export const addEntryPersonAPI = (data) => { export const addEntryPersonAPI = (data) => {
return request({ return requestFormData({
url: '/bmw/worker/insert', url: '/bmw/worker/insert',
method: 'post', method: 'post',
data, data,

View File

@ -1,4 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
import requestFormData from '@/utils/request_formdata'
// 合同见证 人员合同列表接口 // 合同见证 人员合同列表接口
export const getPersonContractListAPI = (data) => { export const getPersonContractListAPI = (data) => {
@ -28,7 +29,7 @@ export const getContractDetailListAPI = (data) => {
// 合同见证 合同上传接口 // 合同见证 合同上传接口
export const uploadContractAPI = (data) => { export const uploadContractAPI = (data) => {
return request({ return requestFormData({
url: `/bmw/workerContract/edit`, url: `/bmw/workerContract/edit`,
method: 'post', method: 'post',
data, data,

View File

@ -1,20 +1,21 @@
<template> <template>
<div> <div>
<el-upload <el-upload
action="#"
name="files"
:limit="limit" :limit="limit"
:multiple="multiple"
:action="uploadFileUrl"
list-type="picture-card"
:file-list="fileListInner"
:headers="headers" :headers="headers"
:auto-upload="false"
:multiple="multiple"
:show-file-list="true"
list-type="picture-card"
:on-error="handleError" :on-error="handleError"
:on-exceed="handleExceed"
:file-list="fileListInner"
:on-remove="handleRemove" :on-remove="handleRemove"
:on-preview="handlePreview" :on-preview="handlePreview"
:on-success="handleSuccess" :on-change="handleChange"
:before-upload="handleBeforeUpload" :before-upload="handleBeforeUpload"
:show-file-list="true"
:on-exceed="handleExceed"
name="files"
:class="isDetail || isUploaded ? 'upload-img' : ''" :class="isDetail || isUploaded ? 'upload-img' : ''"
> >
<i class="el-icon-plus" /> <i class="el-icon-plus" />
@ -102,24 +103,24 @@ export default {
methods: { methods: {
// //
async handleRemove(file, fileList) { async handleRemove(file, fileList) {
if (file.response && file.response.data.length > 0) { // if (file.response && file.response.data.length > 0) {
this.$emit('deleteFile', { // this.$emit('deleteFile', {
filePath: file.response.data[0].filePath, // filePath: file.response.data[0].filePath,
isNew: true, // isNew: true,
}) // })
} else { // } else {
if (file.isNew) { // if (file.isNew) {
this.$emit('deleteFile', { // this.$emit('deleteFile', {
filePath: file.filePath, // filePath: file.filePath,
isNew: true, // isNew: true,
}) // })
} else { // } else {
this.$emit('deleteFile', { // this.$emit('deleteFile', {
filePath: file.filePath, // filePath: file.filePath,
isNew: false, // isNew: false,
}) // })
} // }
} // }
this.$emit('update:fileList', fileList) this.$emit('update:fileList', fileList)
}, },
@ -184,6 +185,11 @@ export default {
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$modal.msgError(`上传的图片数量不能超过 ${this.limit}`) this.$modal.msgError(`上传的图片数量不能超过 ${this.limit}`)
}, },
//
handleChange(file, fileList) {
this.$emit('update:fileList', fileList)
},
}, },
computed: { computed: {

View File

@ -7,18 +7,20 @@ import tagsView from './modules/tagsView'
import permission from './modules/permission' import permission from './modules/permission'
import settings from './modules/settings' import settings from './modules/settings'
import getters from './getters' import getters from './getters'
import common from './modules/common'
Vue.use(Vuex) Vue.use(Vuex)
const store = new Vuex.Store({ const store = new Vuex.Store({
modules: { modules: {
app, app,
dict, dict,
user, user,
tagsView, tagsView,
permission, permission,
settings settings,
}, common,
getters },
getters,
}) })
export default store export default store

View File

@ -0,0 +1,20 @@
const common = {
state: {
// 公司下拉列表
companySelectList: [],
// 总包工程列表
mainProjectList: [],
},
mutations: {
SET_COMPANY_SELECT_LIST(state, companySelectList) {
state.companySelectList = companySelectList
},
SET_MAIN_PROJECT_LIST(state, mainProjectList) {
console.log(mainProjectList, 'mainProjectList--store')
state.mainProjectList = mainProjectList
},
},
}
export default common

View File

@ -0,0 +1,32 @@
import store from '@/store'
import { getCompanySelectListAPI, getMainProjectListAllAPI } from '@/api/common'
// 获取公司下拉列表
export async function getCompanySelectListCommonFun() {
const { companySelectList } = store.state.common
// 先判断store中有没有 如果没有则直接调接口 如果有则取store中的数据
if (companySelectList.length > 0) {
return companySelectList
}
const res = await getCompanySelectListAPI()
if (res.code === 200) {
store.commit('SET_COMPANY_SELECT_LIST', res.rows)
return res.rows
}
return []
}
// 获取总包工程列表
export async function getMainProjectListCommonFun() {
const { mainProjectList } = store.state.common
console.log(mainProjectList, 'mainProjectList')
if (mainProjectList.length > 0) {
return mainProjectList
}
const res = await getMainProjectListAllAPI()
if (res.code === 200) {
store.commit('SET_MAIN_PROJECT_LIST', res.rows)
return res.rows
}
return []
}

View File

@ -0,0 +1,269 @@
import axios from 'axios'
import { Notification, MessageBox, Message, Loading } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams, blobValidate } from '@/utils/bonus'
import cache from '@/plugins/cache'
import { saveAs } from 'file-saver'
import { decryptWithSM4, encryptWithSM4, hashWithSM3AndSalt } from '@/utils/sm'
const systemConfig = JSON.parse(localStorage.getItem('systemConfig')) || {
requestConfig: {
encryptRequest: false,
checkIntegrity: false,
encryptResponse: false,
},
}
let downloadLoadingInstance
// 是否显示重新登录
export let isRelogin = { show: false }
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 10000,
})
// request 拦截器
service.interceptors.request.use(
(config) => {
// 提取 headers 和方法
const headers = config.headers || {}
const {
isToken = true,
encryptRequest = true,
checkIntegrity = true,
encryptResponse = true,
repeatSubmit = false,
} = headers
// 设置请求头
//入参加密
config.headers['encryptRequest'] =
systemConfig.requestConfig.encryptRequest && encryptRequest
? 'true'
: 'false'
// 数据完整性校验
config.headers['checkIntegrity'] =
systemConfig.requestConfig.checkIntegrity && checkIntegrity
? 'true'
: 'false'
//回参是否加密
config.headers['encryptResponse'] =
systemConfig.requestConfig.encryptResponse && encryptResponse
? 'true'
: 'false'
const isRepeatSubmit = repeatSubmit
// 处理 Token
if (getToken() && isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义 token
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params)
url = url.slice(0, -1)
config.params = {}
config.url = url
}
if (
!isRepeatSubmit &&
(config.method === 'post' || config.method === 'put')
) {
// 保存原始数据用于防重复提交验证和加密
let originalData = config.data
let dataStr = ''
// 检查是否是FormData对象
if (config.data instanceof FormData) {
// 对于FormData我们创建一个对象来保存数据以便验证
const formDataObj = {}
config.data.forEach((value, key) => {
formDataObj[key] = value
})
dataStr = JSON.stringify(formDataObj)
// 保持Content-Type为multipart/form-data由浏览器自动设置
delete config.headers['Content-Type']
} else {
// 非FormData数据处理保持原有逻辑
dataStr =
typeof config.data === 'object'
? JSON.stringify(config.data)
: config.data
let contentType =
config.headers['Content-Type'] ||
'application/json;charset=utf-8'
config.headers['Content-Type'] = contentType
if (
contentType.includes('application/json') &&
typeof dataStr !== 'undefined'
) {
// 加密数据
if (
systemConfig.requestConfig.encryptRequest &&
encryptRequest
) {
config.data = encryptWithSM4(
dataStr + '|' + hashWithSM3AndSalt(dataStr),
)
}
}
}
// 检查请求数据大小
const requestSize = JSON.stringify({
url: config.url,
data: dataStr,
time: Date.now(),
}).length
const limitSize = 1000 * 1024 * 1024 // 限制存放数据 5MB
if (requestSize >= limitSize) {
console.warn(
`[${config.url}]: 请求数据大小超出允许的5MB限制无法进行防重复提交验证。`,
)
return config
}
// 防止重复提交
const sessionObj = cache.session.getJSON('sessionObj') || {}
const requestObj = {
url: config.url,
data: dataStr,
time: Date.now(),
}
if (
sessionObj.data === requestObj.data &&
requestObj.time - sessionObj.time < 0 &&
sessionObj.url === requestObj.url
) {
console.warn(`[${sessionObj.url}]: 数据正在处理,请勿重复提交`)
return Promise.reject(new Error('数据正在处理,请勿重复提交'))
}
cache.session.setJSON('sessionObj', requestObj)
}
return config
},
(error) => {
console.error(error)
return Promise.reject(error)
},
)
// 响应拦截器
service.interceptors.response.use(
(res) => {
if (res.headers.encryptresponse && !res.data.hasOwnProperty('code')) {
res.data = JSON.parse(decryptWithSM4(res.data))
}
// 未设置状态码则默认成功状态
const code = res.data.code || 200
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
// 二进制数据则直接返回
if (
res.request.responseType === 'blob' ||
res.request.responseType === 'arraybuffer'
) {
return res.data
}
if (code === 401) {
if (!isRelogin.show) {
isRelogin.show = true
MessageBox.confirm(
'登录状态已过期,您可以继续留在该页面,或者重新登录',
'系统提示',
{
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning',
},
)
.then(() => {
isRelogin.show = false
store.dispatch('LogOut').then(() => {
location.href = '/index'
})
})
.catch(() => {
isRelogin.show = false
})
}
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
} else if (code === 500) {
Message({ message: msg, type: 'error' })
return Promise.reject(new Error(msg))
} else if (code === 601) {
Message({ message: msg, type: 'warning' })
return Promise.reject('error')
} else if (code !== 200) {
Notification.error({ title: msg })
return Promise.reject('error')
} else {
return res.data
}
},
(error) => {
let { message } = error
if (message == 'Network Error') {
message = '后端接口连接异常'
} else if (message.includes('timeout')) {
message = '系统接口请求超时'
} else if (message.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
Message({ message: message, type: 'error', duration: 5 * 1000 })
return Promise.reject(error)
},
)
// 通用下载方法
export function download(url, params, filename, config) {
downloadLoadingInstance = Loading.service({
text: '正在下载数据,请稍候',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
})
return service
.post(url, params, {
transformRequest: [
(params) => {
return tansParams(params)
},
],
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
encryptResponse: false,
},
responseType: 'blob',
...config,
})
.then(async (data) => {
const isBlob = blobValidate(data)
if (isBlob) {
const blob = new Blob([data])
saveAs(blob, filename)
} else {
const resText = await data.text()
const rspObj = JSON.parse(resText)
const errMsg =
errorCode[rspObj.code] || rspObj.msg || errorCode['default']
Message.error(errMsg)
}
downloadLoadingInstance.close()
})
.catch((r) => {
console.error(r)
Message.error('下载文件出现错误,请联系管理员!')
downloadLoadingInstance.close()
})
}
export default service

View File

@ -25,6 +25,7 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
v-hasPermi="['main:project:add']"
@click="onHandleAddOrEditAllProject(1, null)" @click="onHandleAddOrEditAllProject(1, null)"
> >
新增 新增
@ -57,6 +58,7 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-edit" icon="el-icon-edit"
v-hasPermi="['main:project:edit']"
@click="onHandleAddOrEditAllProject(2, data)" @click="onHandleAddOrEditAllProject(2, data)"
> >
修改 修改
@ -65,6 +67,7 @@
size="mini" size="mini"
type="danger" type="danger"
icon="el-icon-delete" icon="el-icon-delete"
v-hasPermi="['main:project:delete']"
@click="onHandleDeleteAllProject(data)" @click="onHandleDeleteAllProject(data)"
> >
删除 删除
@ -250,15 +253,13 @@ export default {
methods: { methods: {
// //
onHandleExportAllProject(queryParams) { onHandleExportAllProject(queryParams) {
console.log(queryParams, '导出') this.download(
'/bmw/mainProject/export',
// this.download( {
// '**', ...queryParams,
// { },
// ...queryParams, `总包工程列表.xlsx`,
// }, )
// `.xlsx`,
// )
}, },
// //
@ -332,6 +333,12 @@ export default {
onHandleViewLotProject(data) { onHandleViewLotProject(data) {
console.log(data, '查看标段工程数量') console.log(data, '查看标段工程数量')
this.lotProjectList = data.pmProjectVoList this.lotProjectList = data.pmProjectVoList
if (data.pmProjectVoList.length === 0) {
this.$modal.msgError('暂无标段工程')
return
}
this.dialogConfig.outerTitle = '子项目(标段工程)概况' this.dialogConfig.outerTitle = '子项目(标段工程)概况'
this.dialogConfig.outerWidth = '80%' this.dialogConfig.outerWidth = '80%'
this.dialogConfig.minHeight = '90vh' this.dialogConfig.minHeight = '90vh'

View File

@ -9,31 +9,31 @@
> >
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="所属总包工程" prop="allProject"> <el-form-item label="所属总包工程" prop="mainProId">
<el-select <el-select
clearable clearable
filterable filterable
style="width: 100%" style="width: 100%"
placeholder="请选择" placeholder="请选择"
v-model="addOrEditForm.allProject" v-model="addOrEditForm.mainProId"
> >
<el-option <el-option
:key="item.value" :key="item.id"
:label="item.label" :label="item.mainProName"
:value="item.value" :value="item.id"
v-for="item in allProjectOptions" v-for="item in allProjectOptions"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="所属项目部" prop="xmb"> <el-form-item label="所属项目部" prop="orgId">
<el-select <el-select
clearable clearable
filterable filterable
style="width: 100%" style="width: 100%"
placeholder="请选择" placeholder="请选择"
v-model="addOrEditForm.xmb" v-model="addOrEditForm.orgId"
> >
<el-option <el-option
:key="item.value" :key="item.value"
@ -47,60 +47,57 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="标段工程名称" prop="lotProjectName"> <el-form-item label="标段工程名称" prop="proName">
<el-input <el-input
clearable clearable
placeholder="请输入标段工程名称" placeholder="请输入标段工程名称"
v-model="addOrEditForm.lotProjectName" v-model="addOrEditForm.proName"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item label="标段工程简称" prop="simpleName">
label="标段工程简称"
prop="lotProjectShortName"
>
<el-input <el-input
clearable clearable
placeholder="请输入标段工程简称" placeholder="请输入标段工程简称"
v-model="addOrEditForm.lotProjectShortName" v-model="addOrEditForm.simpleName"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="工程类型" prop="type"> <el-form-item label="工程类型" prop="proType">
<el-select <el-select
clearable clearable
filterable filterable
style="width: 100%" style="width: 100%"
placeholder="请选择" placeholder="请选择"
v-model="addOrEditForm.type" v-model="addOrEditForm.proType"
> >
<el-option <el-option
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
v-for="item in typeOptions" v-for="item in dict.type.project_type"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="电压等级" prop="level"> <el-form-item label="电压等级" prop="volLevel">
<el-select <el-select
clearable clearable
filterable filterable
style="width: 100%" style="width: 100%"
placeholder="请选择" placeholder="请选择"
v-model="addOrEditForm.level" v-model="addOrEditForm.volLevel"
> >
<el-option <el-option
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
v-for="item in levelOptions" v-for="item in dict.type.voltage_level"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -108,82 +105,84 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否上海项目" prop="isForeignProject"> <el-form-item label="是否上海项目" prop="isShanghai">
<el-radio-group <el-radio-group
size="medium" size="medium"
v-model="addOrEditForm.isForeignProject" v-model="addOrEditForm.isShanghai"
> >
<el-radio-button label="是" /> <el-radio-button :label="1"></el-radio-button>
<el-radio-button label="否" /> <el-radio-button :label="0"></el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="工程状态" prop="status"> <el-form-item label="工程状态" prop="proStatus">
<el-radio-group <el-radio-group
size="medium" size="medium"
v-model="addOrEditForm.status" v-model="addOrEditForm.proStatus"
> >
<el-radio-button <el-radio-button
:key="item.value" :key="item.value"
:label="item.label" :label="item.value"
v-for="item in dict.type.project_status" v-for="item in dict.type.project_status"
/> >
{{ item.label }}
</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="工程地址" prop="address"> <el-form-item label="工程地址" prop="proAddress">
<el-input <el-input
clearable clearable
placeholder="请输入总工程名称" placeholder="请输入总工程名称"
v-model="addOrEditForm.address" v-model="addOrEditForm.proAddress"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="计划开工时间" prop="planStartTime"> <el-form-item label="计划开工时间" prop="startTime">
<el-date-picker <el-date-picker
type="date" type="date"
style="width: 100%" style="width: 100%"
placeholder="选择日期" placeholder="选择日期"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
v-model="addOrEditForm.planStartTime" v-model="addOrEditForm.startTime"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目部经度" prop="projectLongitude"> <el-form-item label="项目部经度" prop="lon">
<el-input <el-input
clearable clearable
placeholder="请输入项目部经度" placeholder="请输入项目部经度"
v-model="addOrEditForm.projectLongitude" v-model="addOrEditForm.lon"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="计划竣工时间" prop="planEndTime"> <el-form-item label="计划竣工时间" prop="endTime">
<el-date-picker <el-date-picker
type="date" type="date"
style="width: 100%" style="width: 100%"
placeholder="选择日期" placeholder="选择日期"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
v-model="addOrEditForm.planEndTime" v-model="addOrEditForm.endTime"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目部纬度" prop="projectLatitude"> <el-form-item label="项目部纬度" prop="lat">
<el-input <el-input
clearable clearable
placeholder="请输入项目部纬度" placeholder="请输入项目部纬度"
v-model="addOrEditForm.projectLatitude" v-model="addOrEditForm.lat"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -193,13 +192,11 @@
</template> </template>
<script> <script>
import { import { addAndEditLotLotProjectAPI } from '@/api/basic-manage/project-manage/lot-project'
addLotLotProjectAPI, import { getMainProjectListCommonFun } from '@/utils/getCommonData'
editLotLotProjectAPI,
} from '@/api/basic-manage/project-manage/lot-project'
export default { export default {
name: 'AddOrEditForm', name: 'AddOrEditForm',
dicts: ['project_status'], dicts: ['project_status', 'project_type', 'voltage_level'],
data() { data() {
// //
const validatePlanEndTime = (rule, value, callback) => { const validatePlanEndTime = (rule, value, callback) => {
@ -219,81 +216,82 @@ export default {
return { return {
formType: 1, formType: 1,
addOrEditForm: { addOrEditForm: {
allProject: '', mainProId: '', // id
xmb: '', orgId: '', // id
lotProjectName: '', proName: '', //
lotProjectShortName: '', simpleName: '', //
type: '', proType: '', //
level: '', volLevel: '', //
isForeignProject: '否', isShanghai: 0,
status: '在建',
address: '', proStatus: '0', // 0
planStartTime: '', proAddress: '', //
planEndTime: '', startTime: '', //
projectLongitude: '', endTime: '', //
projectLatitude: '', lon: '', //
lat: '', //
}, },
addOrEditFormRules: { addOrEditFormRules: {
allProject: [ mainProId: [
{ {
required: true, required: true,
message: '请选择所属总包工程', message: '请选择所属总包工程',
trigger: 'change', trigger: 'change',
}, },
], ],
xmb: [ orgId: [
{ {
required: true, required: true,
message: '请选择所属项目部', message: '请选择所属项目部',
trigger: 'change', trigger: 'change',
}, },
], ],
lotProjectName: [ proName: [
{ {
required: true, required: true,
message: '请输入标段工程名称', message: '请输入标段工程名称',
trigger: 'blur', trigger: 'blur',
}, },
], ],
lotProjectShortName: [ simpleName: [
{ {
required: true, required: true,
message: '请输入标段工程简称', message: '请输入标段工程简称',
trigger: 'blur', trigger: 'blur',
}, },
], ],
type: [ proType: [
{ {
required: true, required: true,
message: '请选择工程类型', message: '请选择工程类型',
trigger: 'change', trigger: 'change',
}, },
], ],
level: [ volLevel: [
{ {
required: true, required: true,
message: '请选择电压等级', message: '请选择电压等级',
trigger: 'change', trigger: 'change',
}, },
], ],
isForeignProject: [ isShanghai: [
{ {
required: true, required: true,
}, },
], ],
status: [ proStatus: [
{ {
required: true, required: true,
}, },
], ],
address: [ proAddress: [
{ {
required: true, required: true,
message: '请输入工程地址', message: '请输入工程地址',
trigger: 'blur', trigger: 'blur',
}, },
], ],
planStartTime: [ startTime: [
{ {
required: false, required: false,
message: '请选择计划开工时间', message: '请选择计划开工时间',
@ -303,7 +301,7 @@ export default {
validator: validatePlanStartTime, validator: validatePlanStartTime,
}, },
], ],
planEndTime: [ endTime: [
{ {
required: false, required: false,
message: '请选择计划竣工时间', message: '请选择计划竣工时间',
@ -313,17 +311,33 @@ export default {
validator: validatePlanEndTime, validator: validatePlanEndTime,
}, },
], ],
lon: [
{
required: false,
},
{
pattern:
/^-?((180(\.0{1,6})?)|((1[0-7]\d)|([1-9]?\d))(\.\d{1,6})?)$/,
message:
'请输入正确的经度(范围:-180 至 180最多6位小数',
trigger: 'blur',
},
],
lat: [
{
required: false,
},
{
pattern:
/^-?((90(\.0{1,6})?)|(([1-8]\d)|(\d))(\.\d{1,6})?)$/,
message:
'请输入正确的纬度(范围:-90 至 90最多6位小数',
trigger: 'blur',
},
],
}, },
allProjectOptions: [ allProjectOptions: [],
{
value: '1',
label: '总包工程1',
},
{
value: '2',
label: '总包工程2',
},
],
xmbOptions: [ xmbOptions: [
{ {
value: '1', value: '1',
@ -334,30 +348,15 @@ export default {
label: '项目部2', label: '项目部2',
}, },
], ],
typeOptions: [
{
value: '1',
label: '类型1',
},
{
value: '2',
label: '类型3',
},
],
levelOptions: [
{
value: '1',
label: '等级1',
},
{
value: '2',
label: '等级2',
},
],
} }
}, },
async created() {
//
const mainProjectList = await getMainProjectListCommonFun()
this.allProjectOptions = mainProjectList
},
methods: { methods: {
// //
onHandleConfirmAddOrEditFun() { onHandleConfirmAddOrEditFun() {
@ -366,11 +365,13 @@ export default {
if (valid) { if (valid) {
console.log(this.addOrEditForm) console.log(this.addOrEditForm)
const API = // const API =
this.formType === 1 // this.formType === 1
? addLotLotProjectAPI // ? addLotLotProjectAPI
: editLotLotProjectAPI // : editLotLotProjectAPI
const res = await API(this.addOrEditForm) const res = await addAndEditLotLotProjectAPI(
this.addOrEditForm,
)
console.log(res, '新增或修改结果') console.log(res, '新增或修改结果')
if (res.code === 200) { if (res.code === 200) {
resolve() resolve()

View File

@ -34,11 +34,11 @@ export const formLabel = [
export const columnsList = [ export const columnsList = [
{ t_props: 'projectName', t_label: '所属总工程' }, { t_props: 'projectName', t_label: '所属总工程' },
{ t_props: 'xmb', t_label: '所属项目部' }, { t_props: 'xmb', t_label: '所属项目部' },
{ t_props: 'name', t_label: '工程名称' }, { t_props: 'proName', t_label: '工程名称' },
{ t_props: 'type', t_label: '工程类型' }, { t_props: 'proType', t_label: '工程类型' },
{ t_props: 'level', t_label: '电压等级' }, { t_props: 'volLevel', t_label: '电压等级' },
{ t_props: 'address', t_label: '工程地址' }, { t_props: 'proAddress', t_label: '工程地址' },
{ t_props: 'status', t_label: '状态' }, { t_props: 'proStatus', t_label: '状态' },
] ]
export const testTableList = [ export const testTableList = [
@ -74,7 +74,7 @@ export const testTableList = [
export const dialogConfig = { export const dialogConfig = {
outerVisible: false, outerVisible: false,
outerTitle: '', outerTitle: '',
outerWidth: '90%', outerWidth: '70%',
minHeight: '', minHeight: '',
maxHeight: '', maxHeight: '',
} }

View File

@ -26,6 +26,7 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
v-hasPermi="['lot:project:add']"
@click="onHandleAddOrEditAllProject(1, null)" @click="onHandleAddOrEditAllProject(1, null)"
> >
新增 新增
@ -45,6 +46,7 @@
size="mini" size="mini"
type="success" type="success"
icon="el-icon-check" icon="el-icon-check"
v-hasPermi="['lot:project:complete']"
@click="onHandleCompleteAllProject(data)" @click="onHandleCompleteAllProject(data)"
> >
完工 完工
@ -54,6 +56,7 @@
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-edit" icon="el-icon-edit"
v-hasPermi="['lot:project:edit']"
@click="onHandleAddOrEditAllProject(2, data)" @click="onHandleAddOrEditAllProject(2, data)"
> >
修改 修改
@ -62,6 +65,7 @@
size="mini" size="mini"
type="danger" type="danger"
icon="el-icon-delete" icon="el-icon-delete"
v-hasPermi="['lot:project:delete']"
@click="onHandleDeleteAllProject(data)" @click="onHandleDeleteAllProject(data)"
> >
删除 删除

View File

@ -152,17 +152,14 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="人脸照片" prop="businessAddress"> <el-form-item label="人脸照片" prop="businessAddress">
<UploadImg <UploadImgFormData
:limit="30" :limit="1"
:file-size="10" :file-size="10"
:multiple="true" :multiple="true"
:is-detail="formType === 2" :is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']" :file-type="['jpg', 'png', 'jpeg']"
:upload-file-url="uploadFileUrl" :file-list.sync="idCardInfoForm.faceImg"
:file-list.sync="addOrEditForm.businessLicense" :is-uploaded="idCardInfoForm.faceImg.length >= 1"
:is-uploaded="
addOrEditForm.businessLicense.length >= 2
"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -516,6 +513,7 @@
<script> <script>
import UploadImg from '@/components/UploadImg' import UploadImg from '@/components/UploadImg'
import UploadImgFormData from '@/components/UploadImgFormData'
import { import {
addEntryPersonAPI, addEntryPersonAPI,
editEntryPersonAPI, editEntryPersonAPI,
@ -539,6 +537,7 @@ export default {
}, },
components: { components: {
UploadImg, UploadImg,
UploadImgFormData,
}, },
data() { data() {
return { return {
@ -556,6 +555,7 @@ export default {
startTime: '', // startTime: '', //
endTime: '', // endTime: '', //
address: '', // address: '', //
faceImg: [], //
}, },
// //
@ -819,6 +819,7 @@ export default {
methods: { methods: {
// //
onHandleConfirmAddOrEditFun() { onHandleConfirmAddOrEditFun() {
console.log(this.idCardInfoForm.faceImg, 'idCardInfoForm.faceImg')
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// 1. // 1.
this.$refs.idCardInfoFormRef.validate((valid1) => { this.$refs.idCardInfoFormRef.validate((valid1) => {
@ -869,6 +870,8 @@ export default {
// bmWorkerContract: this.contractInfoForm, // bmWorkerContract: this.contractInfoForm,
// bmWorkerWageCard: this.salaryCardInfoForm, // bmWorkerWageCard: this.salaryCardInfoForm,
} }
const { faceImg } = this.idCardInfoForm
console.log(params, 'params 组装参数') console.log(params, 'params 组装参数')
if (this.queryDetailsId) { if (this.queryDetailsId) {
@ -880,7 +883,26 @@ export default {
? editEntryPersonAPI ? editEntryPersonAPI
: addEntryPersonAPI : addEntryPersonAPI
const res = await API(params) const formData = new FormData()
Object.keys(params).forEach((key) => {
formData.append(key, params[key])
})
const fileList = faceImg.map((item) => {
return {
name: item.name,
raw: item.raw,
type: 1,
typeName: '人脸照片',
uri: item.url,
}
})
formData.append('fileList', fileList)
console.log(formData, 'formData')
const res = await API(formData)
if (res.code === 200) { if (res.code === 200) {
this.$modal.msgSuccess( this.$modal.msgSuccess(
this.queryDetailsId this.queryDetailsId

View File

@ -16,19 +16,15 @@
v-for="item in contractImageList" v-for="item in contractImageList"
:key="item.title" :key="item.title"
> >
<UploadImg <UploadImgFormData
:limit="30" :key="item.title"
:limit="1"
:file-size="10" :file-size="10"
:multiple="true" :multiple="true"
:is-detail="formType === 2" :is-detail="formType === 2"
:file-type="['jpg', 'png', 'jpeg']" :file-type="['jpg', 'png', 'jpeg']"
:file-list.sync=" :file-list.sync="item.fileList"
addOrEditForm.businessLicense :is-uploaded="item.fileList.length >= 1"
"
:is-uploaded="
addOrEditForm.businessLicense.length >=
2
"
/> />
<span> {{ item.title }} </span> <span> {{ item.title }} </span>
@ -127,6 +123,7 @@
<script> <script>
import UploadImg from '@/components/UploadImg' import UploadImg from '@/components/UploadImg'
import UploadImgFormData from '@/components/UploadImgFormData'
import { import {
uploadContractAPI, uploadContractAPI,
getContractDetailAPI, getContractDetailAPI,
@ -154,6 +151,7 @@ export default {
}, },
components: { components: {
UploadImg, UploadImg,
UploadImgFormData,
}, },
data() { data() {
return { return {
@ -190,23 +188,28 @@ export default {
contractImageList: [ contractImageList: [
{ {
title: '人员手持合同照', title: '人员手持合同照',
imgList: [], type: 1,
fileList: [],
}, },
{ {
title: '工作内容页', title: '工作内容页',
imgList: [], type: 2,
fileList: [],
}, },
{ {
title: '薪酬约定页', title: '薪酬约定页',
imgList: [], type: 3,
fileList: [],
}, },
{ {
title: '本人签名页', title: '本人签名页',
imgList: [], type: 4,
fileList: [],
}, },
{ {
title: '其他照片', title: '其他照片',
imgList: [], type: 5,
fileList: [],
}, },
], ],
} }
@ -215,6 +218,8 @@ export default {
// //
onHandleConfirmAddOrEditFun() { onHandleConfirmAddOrEditFun() {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
console.log(this.contractImageList, 'contractImageList')
const params = { const params = {
...this.contractInfoForm, ...this.contractInfoForm,
workerId: this.workerId, workerId: this.workerId,
@ -225,7 +230,11 @@ export default {
params.id = this.queryDetailsId params.id = this.queryDetailsId
} }
const res = await uploadContractAPI(params) const formData = new FormData()
formData.append('params', JSON.stringify(params))
formData.append('files', JSON.stringify(this.contractImageList))
const res = await uploadContractAPI(formData)
console.log(res, 'res 合同上传') console.log(res, 'res 合同上传')
if (res.code === 200) { if (res.code === 200) {
this.$modal.msgSuccess('合同上传成功') this.$modal.msgSuccess('合同上传成功')

View File

@ -134,8 +134,7 @@ import {
deleteDivideCompanyManageAPI, deleteDivideCompanyManageAPI,
getDivideCompanyManageListAPI, getDivideCompanyManageListAPI,
} from '@/api/system/basic-type-config/divide-company-manage' } from '@/api/system/basic-type-config/divide-company-manage'
import { getCompanySelectListCommonFun } from '@/utils/getCommonData'
import { getCompanySelectListAPI } from '@/api/common'
export default { export default {
name: 'DivideCompanyManage', name: 'DivideCompanyManage',
components: { components: {
@ -183,8 +182,7 @@ export default {
methods: { methods: {
// //
async getCompanySelectList() { async getCompanySelectList() {
const { rows: res } = await getCompanySelectListAPI() this.companySelectAllList = await getCompanySelectListCommonFun()
this.companySelectAllList = res
}, },
// //