1.修复派工时间联动

2.修复派工保存报错
3.修复发货多个项目报错(先保存后提交)
4.修复发货子项目数目不对
This commit is contained in:
Ledo 2025-02-20 10:16:09 +08:00
parent f01f5ac86a
commit 3e69eb4c49
8 changed files with 198 additions and 91 deletions

View File

@ -78,6 +78,7 @@ public interface ErrorCodeConstants {
ErrorCode PROCESS_BOM_CODE_IS_EMPTY= new ErrorCode(1_006_005, "工艺bom编码为空");
ErrorCode PROCESS_BOM_DETAIL_BLUE_PRINT_NO_REPEAT = new ErrorCode(1_006_006, "工艺bom明细图号重复");
ErrorCode PROCESS_BOM_DETAIL_MATERIAL_NAME_IS_NULL = new ErrorCode(1_006_007, "工艺bom明细物料名称为空");
ErrorCode PROCESS_BOM_DETAIL_MATERIAL_AMOUNT_ILLGAL = new ErrorCode(1_006_0012, "工艺bom明细数量必须为数字");
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_MATERIAL_NAME_IS_NULL = new ErrorCode(1_006_008, "非标准件工艺bom明细物料名称为空");
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_MATERIAL_NAME_IS_REPEAT= new ErrorCode(1_006_009, "非标准件工艺bom明细物料名称重复");
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_SPEC_IS_NULL= new ErrorCode(1_006_010, "非标准件工艺bom明细规格为空");

View File

@ -90,7 +90,6 @@ public class DeliverOrderSubDO extends BaseDO {
/**
* 销售订单子项id
*/
@TableField(exist = false)
private Long saleOrderId;
private Long saleOrderSubId;
/**

View File

@ -180,9 +180,10 @@ public class CrossOrderManager {
//如果历史没发过 以本次为准
if(historyDeliveredSubList.isEmpty()) {
historyDeliveredSubList = projectIdEntity.getValue();
}else {
historyDeliveredSubList.addAll(projectIdEntity.getValue());
}
//else {
// historyDeliveredSubList.addAll(projectIdEntity.getValue());
// }
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
// 考虑变更订单情况 只需判断历史发货是否大于等于订单子项数量

View File

@ -267,6 +267,11 @@ public class ProcessBomServiceImpl implements ProcessBomService {
processBomDetailDO.setUnit(o.getUnit());//单位
processBomDetailDO.setBlueprintNo(o.getBlueprintNo());//图号
try {
BigDecimal number = new BigDecimal(o.getAmount());
} catch (NumberFormatException e) {
throw exception(PROCESS_BOM_DETAIL_MATERIAL_AMOUNT_ILLGAL);
}
processBomDetailDO.setAmount(o.getAmount());//数量
processBomDetailDO.setBomType(1);
processBomDetailDO.setUpdateTimes(LocalDateTime.now());

View File

@ -34,7 +34,8 @@
<el-col :span="6">
<el-form-item label="业务员" prop="salesman">
<el-select class="!w-265px" v-model="formData.salesman" clearable @update:new-value="handleSelectedUser">
<el-option v-for="dict in userInit" :key="dict.id"
<el-option
v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select>
<!-- <UserSelect :disabled="alterDisabled || detailDisabled" v-model="formData.salesman" @update:new-value="handleSelectedUser" />-->
@ -311,7 +312,7 @@ const queryData = async (type: string, id?: number) => {
pageNo: 1,
pageSize: 99,
businessId: id,
businessType: businessType
businessType: 'PROJECT_BAOJIA'
}
formData.value.attachments = (await getFilePage(attParams)).list
}

View File

@ -3,7 +3,8 @@
<template #footer>
<el-card class="hl-incard" :class="{ 'alter-class': fieldHasAlter('attachments') }">
<el-upload ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{
<el-upload
ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="contractUploadData" :on-change="contractUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -38,6 +39,7 @@
import { deleteFileLogic, downloadFile, getFilePage } from '@/api/infra/file'
import { inject } from 'vue'
import { dateFormatter, formatDate } from '@/utils/formatTime'
import download from '@/utils/download'
const { t } = useI18n() //
const formData = ref({
id: undefined,
@ -104,6 +106,11 @@ formData.value = await MaterialApi.getMaterial(id)
formData.value.attachments = (await getFilePage(attParams)).list
}
//
const downloadAttachment = async (name, url) => {
const data = await downloadFile(url)
download.any(data, name)
}
const contractUploadChange =async (file, files) => {
contractUploadFiles.value = files
@ -115,7 +122,7 @@ const contractUploadChange =async (file, files) => {
}
const refreshAttachments = (files, type) => {
formData.value.attachments=[]
// formData.value.attachments=[]
formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
return value.businessFileType != type || value.id
})

View File

@ -14,13 +14,16 @@
</div>
<div v-else class="shipments">
<span v-if="betweenDay(new Date(), new Date(formData.projectEndTime)) == -1"
<span
v-if="betweenDay(new Date(), new Date(formData.projectEndTime)) == -1"
class="shipmentsfont">距交货还有{{ betweenDay(new Date(), new Date(formData.projectEndTime)) + 1 }}
</span>
<span v-else-if="betweenDay(new Date(), new Date(formData.projectEndTime)) < -1"
<span
v-else-if="betweenDay(new Date(), new Date(formData.projectEndTime)) < -1"
class="shipmentsfont">距交货还有{{ betweenDay(new Date(), new Date(formData.projectEndTime)) + 1 }}
</span>
<span v-else
<span
v-else
class="shipmentsfont">距交货还有{{ betweenDay(new Date(), new Date(formData.projectEndTime)) + 1 }}
</span>
@ -43,9 +46,11 @@
<el-row>
<el-col :span="24">
<el-form-item label="项目编号" prop="code">
<el-input v-if="query.active != 'detailArchive'" disabled
<el-input
v-if="query.active != 'detailArchive'" disabled
v-model="formData.code" class="!w-250px" placeholder="系统自动生成" />
<el-input v-else disabled v-model="formData.snapshotCode" class="!w-250px"
<el-input
v-else disabled v-model="formData.snapshotCode" class="!w-250px"
placeholder="系统自动生成" />
</el-form-item>
</el-col>
@ -53,7 +58,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="提出部门" prop="businessDeptId">
<el-tree-select class="!w-250px" v-model="formData.businessDeptId"
<el-tree-select
class="!w-250px" v-model="formData.businessDeptId"
:data="deptList" :props="defaultProps" check-strictly node-key="id"
clearable placeholder="请选择提出部门"
:disabled="alterDisabled || detailDisabled || priceDisabled" />
@ -63,7 +69,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="项目名称" prop="projectName">
<el-input class="!w-250px" :disabled="alterDisabled || detailDisabled || priceDisabled"
<el-input
class="!w-250px" :disabled="alterDisabled || detailDisabled || priceDisabled"
v-model="formData.projectName" placeholder="请输入项目名称" />
</el-form-item>
</el-col>
@ -71,7 +78,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="项目开始日期" prop="projectStartTime">
<el-date-picker class="!w-250px" v-model="formData.projectStartTime"
<el-date-picker
class="!w-250px" v-model="formData.projectStartTime"
type="date" value-format="x" placeholder="选择项目开始日期"
:disabled="alterDisabled || detailDisabled || priceDisabled" />
</el-form-item>
@ -82,7 +90,8 @@
<el-form-item label="首付款" prop="shouFuKuan">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.shouFuKuan"
<el-input-number
v-model="formData.shouFuKuan"
:disabled="detailDisabled || formData.hasPrice == 0"
placeholder="请输入首付款" @blur="handleBlur" :controls="false" :min="0"
:precision="6" style="width: 150px"
@ -101,7 +110,8 @@
<el-form-item label="第三笔款" prop="threeFuKuan">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.threeFuKuan"
<el-input-number
v-model="formData.threeFuKuan"
:disabled="detailDisabled || formData.hasPrice == 0"
placeholder="输入第三笔付款" @blur="threehandleBlur" :controls="false"
:min="0" :precision="6" style="width: 150px"
@ -120,7 +130,8 @@
<el-form-item label="第五笔款" prop="fiveFuKuan">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.fiveFuKuan"
<el-input-number
v-model="formData.fiveFuKuan"
:disabled="detailDisabled || formData.hasPrice == 0"
placeholder="输入第三笔付款" @blur="fivehandleBlur" :controls="false"
:min="0" :precision="6" style="width: 150px"
@ -151,7 +162,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="业务员" prop="businessMan">
<el-tree-select class="!w-250px" v-model="formData.businessMan"
<el-tree-select
class="!w-250px" v-model="formData.businessMan"
:data="userList" :props="userProps" check-strictly node-key="id"
clearable placeholder="请选择业务员"
:disabled="alterDisabled || detailDisabled || priceDisabled" />
@ -164,7 +176,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="所属业务线" prop="businessLine">
<el-select class="!w-250px" v-model="formData.businessLine"
<el-select
class="!w-250px" v-model="formData.businessLine"
placeholder="请选择所属业务线" :disabled="alterDisabled || detailDisabled">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)"
@ -176,11 +189,13 @@
<el-row>
<el-col :span="24">
<el-form-item label="项目结束日期" prop="projectEndTime">
<el-date-picker class="!w-250px"
<el-date-picker
class="!w-250px"
:class="{ 'alter-class': fieldHasAlter('projectEndTime') }"
v-model="formData.projectEndTime" type="date" value-format="x"
placeholder="选择项目结束日期" :disabled="detailDisabled || priceDisabled" />
<span style="position: absolute; left: 0; top: 30px"
<span
style="position: absolute; left: 0; top: 30px"
v-if="formData.projectStartTime && formData.projectEndTime">{{
' 共计' +
betweenDay1(
@ -195,7 +210,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="首付款预计时间" prop="shouFuKuanTime">
<el-date-picker class="!w-250px" v-model="formData.shouFuKuanTime"
<el-date-picker
class="!w-250px" v-model="formData.shouFuKuanTime"
type="date" value-format="x" placeholder="选择日期"
:disabled="detailDisabled || formData.hasPrice == 0" />
</el-form-item>
@ -205,7 +221,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="第三笔款预计时间" prop="threeFuKuanTime">
<el-date-picker class="!w-250px" v-model="formData.threeFuKuanTime"
<el-date-picker
class="!w-250px" v-model="formData.threeFuKuanTime"
type="date" value-format="x" placeholder="选择日期"
:disabled="detailDisabled || formData.hasPrice == 0" />
</el-form-item>
@ -215,7 +232,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="第五笔款预计时间" prop="fiveFuKuanTime">
<el-date-picker class="!w-250px" v-model="formData.fiveFuKuanTime"
<el-date-picker
class="!w-250px" v-model="formData.fiveFuKuanTime"
type="date" value-format="x" placeholder="选择日期"
:disabled="detailDisabled || formData.hasPrice == 0" />
</el-form-item>
@ -228,7 +246,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="可引用的原有技术" prop="referenceTechnology">
<el-input class="!w-703px" :disabled="detailDisabled || priceDisabled"
<el-input
class="!w-703px" :disabled="detailDisabled || priceDisabled"
v-model="formData.referenceTechnology" placeholder="请输入可引用的原有技术"
:class="{ 'alter-class': fieldHasAlter('referenceTechnology') }" />
</el-form-item>
@ -248,17 +267,20 @@
<el-col :span="24">
<el-form-item label="客户名称" prop="customerId">
<ClientSelect :disabled="alterDisabled || detailDisabled || priceDisabled"
v-model="formData.customerId" @update:newValue="handleSelectedClient" />
<ClientSelect
:disabled="alterDisabled || detailDisabled || priceDisabled"
v-model="formData.customerId" @update:new-value="handleSelectedClient" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="性质" prop="property">
<el-select class="!w-250px" :class="{ 'alter-class': fieldHasAlter('property') }"
<el-select
class="!w-250px" :class="{ 'alter-class': fieldHasAlter('property') }"
:disabled="detailDisabled || priceDisabled" v-model="formData.property" placeholder="请选择性质">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PROPERTY)"
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PROPERTY)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
@ -267,9 +289,11 @@
<el-row>
<el-col :span="24">
<el-form-item label="是否有价格" prop="hasPrice">
<el-radio-group v-model="formData.hasPrice" :disabled="detailDisabled || priceDisabled"
<el-radio-group
v-model="formData.hasPrice" :disabled="detailDisabled || priceDisabled"
:class="{ 'alter-class': fieldHasAlter('hasPrice') }">
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
@ -284,7 +308,8 @@
<el-form-item label="第二笔款" prop="twoFuKuan">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.twoFuKuan"
<el-input-number
v-model="formData.twoFuKuan"
:disabled="detailDisabled || formData.hasPrice == 0" placeholder="输入第二笔付款"
@blur="twohandleBlur" :controls="false" :min="0" :precision="6"
style="width: 150px" :class="{ 'alter-class': fieldHasAlter('price') }" />
@ -302,7 +327,8 @@
<el-form-item label="第四笔款" prop="fourFuKuan">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.fourFuKuan"
<el-input-number
v-model="formData.fourFuKuan"
:disabled="detailDisabled || formData.hasPrice == 0" placeholder="输入第四笔付款"
@blur="fourhandleBlur" :controls="false" :min="0" :precision="6"
style="width: 150px" :class="{ 'alter-class': fieldHasAlter('price') }" />
@ -319,7 +345,8 @@
<el-col :span="24">
<el-form-item label="第六笔款" prop="sixFuKuan">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.sixFuKuan"
<el-input-number
v-model="formData.sixFuKuan"
:disabled="detailDisabled || formData.hasPrice == 0" placeholder="输入第六笔付款"
@blur="sixhandleBlur" :controls="false" :min="0" :precision="6"
style="width: 150px" :class="{ 'alter-class': fieldHasAlter('price') }" />
@ -337,9 +364,11 @@
<el-row>
<el-col :span="24">
<el-form-item label="是否紧急" prop="isUrgency">
<el-radio-group v-model="formData.isUrgency" :disabled="detailDisabled || priceDisabled"
<el-radio-group
v-model="formData.isUrgency" :disabled="detailDisabled || priceDisabled"
:class="{ 'alter-class': fieldHasAlter('isUrgency') }">
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
@ -359,7 +388,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="合同号" prop="contractNo">
<el-input class="!w-250px" :disabled="alterDisabled || detailDisabled || priceDisabled"
<el-input
class="!w-250px" :disabled="detailDisabled || priceDisabled"
v-model="formData.contractNo" placeholder="请输入合同号" />
</el-form-item>
</el-col>
@ -367,7 +397,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="模具图号" prop="blueprintNo">
<el-input class="!w-250px" :disabled="alterDisabled || detailDisabled || priceDisabled"
<el-input
class="!w-250px" :disabled="alterDisabled || detailDisabled || priceDisabled"
v-model="formData.blueprintNo" placeholder="请输入模具图号" />
</el-form-item>
</el-col>
@ -376,14 +407,17 @@
<el-col :span="24">
<el-form-item label="价格(元)" prop="price">
<div style="display: flex; align-items: center">
<el-input-number v-model="formData.price"
<el-input-number
v-model="formData.price"
:disabled="detailDisabled || formData.hasPrice == 0" placeholder="请输入价格"
:controls="false" :min="0" :precision="6" style="width: 150px"
:class="{ 'alter-class': fieldHasAlter('price') }" />
<el-select :disabled="detailDisabled" v-model="formData.currency"
<el-select
:disabled="detailDisabled" v-model="formData.currency"
placeholder="请选择币种" style="width: 100px"
:class="{ 'alter-class': fieldHasAlter('currency') }">
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_CURRENCY)"
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_CURRENCY)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</div>
@ -395,7 +429,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="第二笔预计时间" prop="twoFuKuanTime">
<el-date-picker class="!w-250px" v-model="formData.twoFuKuanTime" type="date"
<el-date-picker
class="!w-250px" v-model="formData.twoFuKuanTime" type="date"
value-format="x" placeholder="选择日期"
:disabled="detailDisabled || formData.hasPrice == 0" />
</el-form-item>
@ -405,7 +440,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="第四笔款预计时间" prop="fourFuKuanTime">
<el-date-picker class="!w-250px" v-model="formData.fourFuKuanTime" type="date"
<el-date-picker
class="!w-250px" v-model="formData.fourFuKuanTime" type="date"
value-format="x" placeholder="选择日期"
:disabled="detailDisabled || formData.hasPrice == 0" />
</el-form-item>
@ -415,7 +451,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="第六笔款预计时间" prop="sixFuKuanTime">
<el-date-picker class="!w-250px" v-model="formData.sixFuKuanTime" type="date"
<el-date-picker
class="!w-250px" v-model="formData.sixFuKuanTime" type="date"
value-format="x" placeholder="选择日期"
:disabled="detailDisabled || formData.hasPrice == 0" />
</el-form-item>
@ -426,7 +463,8 @@
<el-col :span="24">
<el-form-item label="是否已变更" prop="hasAlter">
<el-select class="!w-250px" v-model="formData.hasAlter" placeholder="请选择" disabled>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
@ -437,14 +475,16 @@
<el-row>
<el-col :span="12">
<el-form-item label="检验要求" prop="qualityRequirement">
<el-input class="!w-703px" :disabled="detailDisabled || priceDisabled " type="textarea"
<el-input
class="!w-703px" :disabled="detailDisabled || priceDisabled " type="textarea"
v-model="formData.qualityRequirement" placeholder="请输入检验要求" show-word-limit
maxlength="200" :class="{ 'alter-class': fieldHasAlter('qualityRequirement') }" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark" :disabled="detailDisabled">
<el-input class="!w-703px" :disabled="detailDisabled || priceDisabled" type="textarea"
<el-input
class="!w-703px" :disabled="detailDisabled || priceDisabled" type="textarea"
v-model="formData.remark" placeholder="请输入检验备注" show-word-limit maxlength="200"
:class="{ 'alter-class': fieldHasAlter('remark') }" />
</el-form-item>
@ -458,9 +498,11 @@
<el-row>
<el-col :span="6">
<el-form-item label="有无合同" prop="hasContract">
<el-radio-group :disabled="detailDisabled || priceDisabled" v-model="formData.hasContract"
<el-radio-group
:disabled="detailDisabled || priceDisabled" v-model="formData.hasContract"
:class="{ 'alter-class': fieldHasAlter('hasContract') }">
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
@ -469,9 +511,11 @@
</el-col>
<el-col :span="6">
<el-form-item label="有无技术协议" prop="hasTechnologyProtocol">
<el-radio-group :disabled="detailDisabled || priceDisabled" v-model="formData.hasTechnologyProtocol"
<el-radio-group
:disabled="detailDisabled || priceDisabled" v-model="formData.hasTechnologyProtocol"
:class="{ 'alter-class': fieldHasAlter('hasTechnologyProtocol') }">
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
@ -480,9 +524,11 @@
</el-col>
<el-col :span="5">
<el-form-item label="有无图纸/数模" prop="hasBlueprint">
<el-radio-group :disabled="detailDisabled || priceDisabled" v-model="formData.hasBlueprint"
<el-radio-group
:disabled="detailDisabled || priceDisabled" v-model="formData.hasBlueprint"
:class="{ 'alter-class': fieldHasAlter('hasBlueprint') }">
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
@ -491,7 +537,8 @@
</el-col>
<el-col :span="6">
<el-form-item label="" label-width="0" prop="blueprintRemark">
<el-input v-model="formData.blueprintRemark" placeholder="请输入图纸/数模说明" :disabled="
<el-input
v-model="formData.blueprintRemark" placeholder="请输入图纸/数模说明" :disabled="
detailDisabled || (formData.hasBlueprint == 0 && (formData.blueprintRemark = '')) || priceDisabled
" :class="{ 'alter-class': fieldHasAlter('blueprintRemark') }" />
</el-form-item>
@ -509,17 +556,21 @@
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增
</el-button>
</el-col>
<el-form ref="projectOrderSubFormRef" :model="formData.projectOrderSubs"
<el-form
ref="projectOrderSubFormRef" :model="formData.projectOrderSubs"
:rules="subFormRules" v-loading="subFormLoading" label-width="0">
<el-table :data="formData.projectOrderSubs" class="hl-table"
<el-table
:data="formData.projectOrderSubs" class="hl-table"
:row-class-name="({row,rowIndex}) => { return fieldHasAlterInRow('NEW', row) ? 'alter-class1' : ''}">
<el-table-column label="序号" type="index" width="80" />
<el-table-column min-width="200" align="center">
<template #header> <span class="hl-table_header">*</span>子项目名称 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="subFormRules.name"
<el-form-item
:prop="`${$index}.name`" :rules="subFormRules.name"
class="mb-0px!">
<el-input :disabled="detailDisabled || row.id || priceDisabled" v-model="row.name"
<el-input
:disabled="detailDisabled || row.id || priceDisabled" v-model="row.name"
placeholder="请输入子项目名称" />
</el-form-item>
</template>
@ -531,10 +582,12 @@
</el-form-item>
</template> -->
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.deviceModel`"
<el-form-item
:prop="`${$index}.deviceModel`"
:rules="subFormRules.deviceModel" class="mb-0px!">
<EquipSelect v-model="row.deviceModel"
@update:newValue="handleSelectedequip($index, $event)"
<EquipSelect
v-model="row.deviceModel"
@update:new-value="handleSelectedequip($index, $event)"
:disabled="detailDisabled || (alterDisabled && row.id) || priceDisabled" />
</el-form-item>
</template>
@ -542,9 +595,11 @@
<el-table-column min-width="125" align="center">
<template #header> <span class="hl-table_header">*</span>数量 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount"
<el-form-item
:prop="`${$index}.amount`" :rules="subFormRules.amount"
class="mb-0px!">
<el-input-number style="width: 100%" :disabled="auditDisabled&&(detailDisabled || priceDisabled)"
<el-input-number
style="width: 100%" :disabled="auditDisabled&&(detailDisabled || priceDisabled)"
v-model="row.amount" placeholder="请输入数量" :min="0" :precision="0"
:class="{ 'alter-class': fieldHasAlterInRow('amount', row) }" />
</el-form-item>
@ -553,9 +608,11 @@
<el-table-column min-width="125" align="center">
<template #header> <span class="hl-table_header">*</span>单位 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit"
<el-form-item
:prop="`${$index}.unit`" :rules="subFormRules.unit"
class="mb-0px!">
<el-select :disabled="detailDisabled || priceDisabled" v-model="row.unit"
<el-select
:disabled="detailDisabled || priceDisabled" v-model="row.unit"
placeholder="请选择单位"
:class="{ 'alter-class': fieldHasAlterInRow('unit', row) }">
<el-option
@ -568,10 +625,12 @@
<el-table-column min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>材质 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.compositionId`"
<el-form-item
:prop="`${$index}.compositionId`"
:rules="subFormRules.compositionId" class="mb-0px!">
<CompositionSelect v-model="row.compositionId"
@update:newValue="handleSelectedcomposition($index, $event)"
<CompositionSelect
v-model="row.compositionId"
@update:new-value="handleSelectedcomposition($index, $event)"
:disabled="detailDisabled || priceDisabled"
:class="{ 'alter-class': fieldHasAlterInRow('compositionId', row) }" />
</el-form-item>
@ -579,9 +638,11 @@
</el-table-column>
<el-table-column label="备注" min-width="180" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" :rules="subFormRules.remark"
<el-form-item
:prop="`${$index}.remark`" :rules="subFormRules.remark"
class="mb-0px!">
<el-input :disabled="detailDisabled || priceDisabled" v-model="row.remark"
<el-input
:disabled="detailDisabled || priceDisabled" v-model="row.remark"
placeholder="请输入备注"
:class="{ 'alter-class': fieldHasAlterInRow('remark', row) }" />
</el-form-item>
@ -611,7 +672,8 @@
<el-col>
<el-card class="hl-incard" :class="{ 'alter-class': fieldHasAlter('attachments') }">
<el-col v-if="'update,create,alter'.indexOf(query.active) > -1">
<el-upload v-if="formData.hasContract == 1" ref="contractUploadRef"
<el-upload
v-if="formData.hasContract == 1" ref="contractUploadRef"
:file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
@ -622,7 +684,8 @@
<Icon icon="ep:upload-filled" />上传合同
</el-button>
</el-upload>
<el-upload v-if="formData.hasTechnologyProtocol == 1" ref="protocolUploadRef" multiple
<el-upload
v-if="formData.hasTechnologyProtocol == 1" ref="protocolUploadRef" multiple
:action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
@ -634,7 +697,8 @@
</el-button>
</el-upload>
</el-col>
<el-table :data="formData.attachments" v-loading.fullscreen.lock="uploading"
<el-table
:data="formData.attachments" v-loading.fullscreen.lock="uploading"
element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)"
class="hl-table">
<el-table-column prop="name" label="文件名称" align="center" />
@ -645,16 +709,19 @@
}}
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" label="上传时间"
<el-table-column
prop="createTime" align="center" label="上传时间"
:formatter="dateFormatter" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button v-if="'update,create,alter'.indexOf(query.active) > -1" link
<el-button
v-if="'update,create,alter'.indexOf(query.active) > -1" link
type="danger" size="small"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除
</el-button>
<el-button v-if="!!scope.row.id" link type="primary" size="small"
<el-button
v-if="!!scope.row.id" link type="primary" size="small"
@click="downloadAttachment(scope.row.name, scope.row.url)">
下载
</el-button>
@ -672,7 +739,8 @@
<el-row>
<el-col>
<el-card class="hl-incard">
<el-table v-if="formData && formData.operateLogs" :data="formData.operateLogs"
<el-table
v-if="formData && formData.operateLogs" :data="formData.operateLogs"
class="hl-table" :style="{ height: formData.operateLogs.length > 10 ? '450px' : '' }">
<el-table-column prop="type" label="操作" align="center">
<template #default="scope">
@ -680,7 +748,8 @@
</template>
</el-table-column>
<el-table-column prop="userNickname" label="操作人" align="center" />
<el-table-column label="操作时间" align="center" prop="startTime" width="220"
<el-table-column
label="操作时间" align="center" prop="startTime" width="220"
:formatter="dateFormatter" />
<el-table-column prop="content" label="操作意见" align="center" />
</el-table>
@ -689,31 +758,40 @@
</el-row>
</el-card>
</el-form>
<div class="text-center hl-footer">
<div class="hl-footer text-center">
<el-button @click="() => router.back()" size="large"> </el-button>
<el-button v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus <= 4"
<el-button
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus <= 4"
@click="submitForm('SAVE')" type="success" size="large" :disabled="saveDisabled"> </el-button>
<el-button v-if="'price'.indexOf(query.active) > -1"
<el-button
v-if="'price'.indexOf(query.active) > -1"
@click="submitForm('PRICE')" type="success" size="large"> </el-button>
<el-button v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus < 8"
<el-button
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus < 8"
@click="submitForm('SUBMIT_AUDIT')" type="primary" size="large" :disabled="submitDisabled"> </el-button>
<el-button v-if="query.active == 'audit' && formData.orderStatus == 8" @click="submitForm('AUDIT')"
<el-button
v-if="query.active == 'audit' && formData.orderStatus == 8" @click="submitForm('AUDIT')"
type="primary" size="large"> </el-button>
<el-button v-if="query.active == 'approve' && formData.orderStatus == 16" @click="submitForm('APPROVE')"
<el-button
v-if="query.active == 'approve' && formData.orderStatus == 16" @click="submitForm('APPROVE')"
type="primary" size="large"> </el-button>
<el-button v-if="query.active == 'alter' && formData.orderStatus == 32" @click="submitForm('ALTER')"
<el-button
v-if="query.active == 'alter' && formData.orderStatus == 32" @click="submitForm('ALTER')"
type="danger" size="large">发起变更</el-button>
<el-button v-if="
<el-button
v-if="
'audit,approve'.indexOf(query.active) > -1 &&
(formData.orderStatus == 8 || formData.orderStatus == 16)
" @click="activeOpinionDialogVisible = true" type="danger" size="large"> </el-button>
<el-button v-if="query.active == 'terminate' && formData.orderStatus == 32" @click="submitForm('TERMINATE')"
<el-button
v-if="query.active == 'terminate' && formData.orderStatus == 32" @click="submitForm('TERMINATE')"
type="danger" size="large">直接终止</el-button>
</div>
</el-card>
<el-dialog v-model="activeOpinionDialogVisible" title="打回原因" width="30%" center>
<el-input type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原因" show-word-limit
<el-input
type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原因" show-word-limit
maxlength="200" />
<template #footer>
<span class="dialog-footer">

View File

@ -297,7 +297,7 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
<el-form-item :prop="`${$index}.startTime`" :rules="subFormRules.startTime" class="mb-0px!">
<el-date-picker
:disabled="detailDisabled " v-model="row.startTime"
type="date" value-format="x" placeholder="选择预计开始日期" />
type="date" value-format="x" placeholder="选择预计开始日期" @change="changePrepTime('START',$index,row)" />
</el-form-item>
</template>
</el-table-column>
@ -307,7 +307,7 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
<el-form-item :prop="`${$index}.endTime`" :rules="subFormRules.endTime" class="mb-0px!">
<el-date-picker
:disabled=" detailDisabled" v-model="row.endTime"
type="date" value-format="x" placeholder="选择预计结束日期" />
type="date" value-format="x" placeholder="选择预计结束日期" @change="changePrepTime('END',$index,row)"/>
</el-form-item>
</template>
</el-table-column>
@ -561,6 +561,21 @@ const formLoading = ref(false)
const dialogTitle = ref('')
const detailDisabled = ref(false)
const changePrepTime = (type,index,row)=>{
if(index == 0){
formData.value.taskDispatchDetails.forEach((item)=>{
if(item.id == null){
console.log('sss')
if(type == 'END'){
item.endTime = row.endTime;
}else{
item.startTime = row.startTime;
}
}
})
}
}
const formatDateT = (timestamp) => {
const date = new Date(timestamp);