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

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'
// 新增标段工程
export const addLotLotProjectAPI = (data) => {
// 新增和修改标段工程
export const addAndEditLotLotProjectAPI = (data) => {
return request({
url: '/project/***',
url: '/bmw/pmOrg/addOrUpdateProject',
method: 'POST',
data,
})

View File

@ -9,3 +9,10 @@ export function getCompanySelectListAPI() {
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 requestFormData from '@/utils/request_formdata'
// 人员入场 新增人员接口
export const addEntryPersonAPI = (data) => {
return request({
return requestFormData({
url: '/bmw/worker/insert',
method: 'post',
data,

View File

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

View File

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

View File

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

View File

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

View File

@ -34,11 +34,11 @@ 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: 'level', t_label: '电压等级' },
{ t_props: 'address', t_label: '工程地址' },
{ t_props: 'status', t_label: '状态' },
{ t_props: 'proName', t_label: '工程名称' },
{ t_props: 'proType', t_label: '工程类型' },
{ t_props: 'volLevel', t_label: '电压等级' },
{ t_props: 'proAddress', t_label: '工程地址' },
{ t_props: 'proStatus', t_label: '状态' },
]
export const testTableList = [
@ -74,7 +74,7 @@ export const testTableList = [
export const dialogConfig = {
outerVisible: false,
outerTitle: '',
outerWidth: '90%',
outerWidth: '70%',
minHeight: '',
maxHeight: '',
}

View File

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

View File

@ -152,17 +152,14 @@
</el-col>
<el-col :span="12">
<el-form-item label="人脸照片" prop="businessAddress">
<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
"
:file-list.sync="idCardInfoForm.faceImg"
:is-uploaded="idCardInfoForm.faceImg.length >= 1"
/>
</el-form-item>
</el-col>
@ -516,6 +513,7 @@
<script>
import UploadImg from '@/components/UploadImg'
import UploadImgFormData from '@/components/UploadImgFormData'
import {
addEntryPersonAPI,
editEntryPersonAPI,
@ -539,6 +537,7 @@ export default {
},
components: {
UploadImg,
UploadImgFormData,
},
data() {
return {
@ -556,6 +555,7 @@ export default {
startTime: '', //
endTime: '', //
address: '', //
faceImg: [], //
},
//
@ -819,6 +819,7 @@ export default {
methods: {
//
onHandleConfirmAddOrEditFun() {
console.log(this.idCardInfoForm.faceImg, 'idCardInfoForm.faceImg')
return new Promise((resolve, reject) => {
// 1.
this.$refs.idCardInfoFormRef.validate((valid1) => {
@ -869,6 +870,8 @@ export default {
// bmWorkerContract: this.contractInfoForm,
// bmWorkerWageCard: this.salaryCardInfoForm,
}
const { faceImg } = this.idCardInfoForm
console.log(params, 'params 组装参数')
if (this.queryDetailsId) {
@ -880,7 +883,26 @@ export default {
? editEntryPersonAPI
: 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) {
this.$modal.msgSuccess(
this.queryDetailsId

View File

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

View File

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