heli-mes/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/edit.vue

2996 lines
114 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-card class="hl-card" style="position: relative">
<template #header>
<span>编辑页</span>
</template>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="160px"
v-loading="formLoading"
>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
</template>
<el-row>
<el-col :span="24">
<el-row>
<el-col :span="6">
<el-row>
<el-col :span="24">
<el-form-item label="计划编号" prop="planNo">
<el-input
class="!w-265px"
placeholder="系统自动生成"
v-model="formData.planNo"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目名称" prop="projectName">
<el-input
class="!w-265px"
placeholder="项目名称"
v-model="formData.projectName"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目负责人" prop="projectOwner">
<!-- <el-select class="!w-265px" v-model="formData.projectOwner" filterable >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select> -->
<!-- <UserSelect v-model="formData.projectOwner" @update:new-value="handleSelectedUser1" class="!w-265px"/>-->
<el-select
class="!w-265px"
v-model="formData.projectOwner"
clearable
filterable
>
<el-option
v-for="dict in userInit"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="是否要铸件图" prop="hasCast">
<el-radio-group v-model="formData.hasCast" @change="handleCastInfo">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="是否要工艺" prop="hasCraft">
<el-radio-group v-model="formData.hasCraft" @change="handleCraftInfo">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="计划编制人" prop="editor">
<!-- <el-select class="!w-265px" v-model="formData.editor" filterable >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select> -->
<UserSelect
v-model="formData.editor"
@update:new-value="handleSelectedUser3"
class="!w-265px"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="计划编制日期" prop="editorDate">
<el-date-picker
class="!w-265px"
v-model="formData.editorDate"
type="date"
value-format="x"
placeholder="计划编制日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="80">
<el-form-item label="备注" prop="description">
<el-input
class="!w-713px"
type="textarea"
v-model="formData.description"
show-word-limit
maxlength="200"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-row>
<el-col :span="24">
<el-form-item label="项目编号" prop="projectCode">
<el-input
class="!w-265px"
placeholder="项目编号"
v-model="formData.projectCode"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="业务员" prop="businessMan">
<el-input
class="!w-265px"
placeholder="业务员"
v-model="formData.businessMan"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="所属业务线" prop="businessLine">
<el-select class="!w-265px" v-model="formData.businessLine" disabled>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="铸件图负责人" prop="castOwner">
<!-- <el-select class="!w-265px" v-model="formData.craftOwner" filterable :disabled="!formData.hasCraft " >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select> -->
<!-- <UserSelect v-model="formData.craftOwner" @update:new-value="handleSelectedUser2" class="!w-265px"/>-->
<el-select
class="!w-265px"
v-model="formData.castOwner"
clearable
:disabled="formData.hasCast == 0"
filterable
>
<el-option
v-for="dict in userInit"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工艺负责人" prop="craftOwner">
<!-- <el-select class="!w-265px" v-model="formData.craftOwner" filterable :disabled="!formData.hasCraft " >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select> -->
<!-- <UserSelect v-model="formData.craftOwner" @update:new-value="handleSelectedUser2" class="!w-265px"/>-->
<el-select
class="!w-265px"
v-model="formData.craftOwner"
clearable
:disabled="formData.hasCraft == 0"
filterable
>
<el-option
v-for="dict in userInit"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="计划审核人" prop="auditor">
<!-- <el-select class="!w-265px" v-model="formData.auditor" filterable >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select> -->
<UserSelect
v-model="formData.auditor"
@update:new-value="handleSelectedUser4"
class="!w-265px"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="计划审核日期" prop="auditDate">
<el-date-picker
class="!w-265px"
v-model="formData.auditDate"
type="date"
value-format="x"
placeholder="计划审核日期"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-row>
<el-col :span="24">
<el-form-item label="项目状态" prop="projectStatus">
<el-select
v-model="formData.projectStatus"
placeholder="项目状态"
clearable
class="!w-265px"
disabled
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_ORDER_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目开始日期" prop="projectStartTime">
<el-date-picker
class="!w-265px"
v-model="formData.projectStartTime"
type="date"
value-format="x"
placeholder="项目开始日期"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="性质" prop="property">
<el-select
class="!w-265px"
v-model="formData.property"
placeholder="下拉选择"
disabled
>
<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>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="铸件图开始日期" prop="castStartDate">
<el-date-picker
class="!w-265px"
v-model="formData.castStartDate"
type="date"
value-format="x"
placeholder="铸件图开始日期"
:disabled="!formData.hasCast"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工艺开始日期" prop="craftStartTime">
<el-date-picker
class="!w-265px"
v-model="formData.craftStartDate"
type="date"
value-format="x"
placeholder="工艺开始日期"
:disabled="!formData.hasCraft"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="计划批准人" prop="approver">
<!-- <el-select class="!w-265px" v-model="formData.approver" filterable >
<el-option v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select> -->
<UserSelect
v-model="formData.approver"
@update:new-value="handleSelectedUser5"
class="!w-265px"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="计划批准日期" prop="approveDate">
<el-date-picker
class="!w-265px"
v-model="formData.approveDate"
type="date"
value-format="x"
placeholder="计划批准日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="生产状态" prop="status">
<el-select
v-model="formData.status"
placeholder="生产状态"
clearable
class="!w-265px"
disabled
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-row>
<el-col :span="24">
<el-form-item label="客户名称" prop="customerName">
<el-input
class="!w-265px"
v-model="formData.customerName"
placeholder="客户名称"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目结束日期" prop="projectEndTime">
<el-date-picker
class="!w-265px"
v-model="formData.projectEndTime"
type="date"
value-format="x"
placeholder="项目结束日期"
disabled
/>
<span
style="position: absolute; left: 0; top: 30px"
v-if="formData.projectStartTime && formData.projectEndTime"
>{{
' 共计' +
betweenDay1(
new Date(formData.projectStartTime),
new Date(formData.projectEndTime)
) +
'天'
}}</span
>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="是否紧急" prop="isUrgency">
<el-select class="!w-265px" v-model="formData.isUrgency" disabled>
<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>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="铸件图结束日期" prop="castEndDate">
<el-date-picker
class="!w-265px"
v-model="formData.castEndDate"
type="date"
value-format="x"
placeholder="铸件图结束日期"
:disabled="!formData.hasCast"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工艺结束日期" prop="craftEndTime">
<el-date-picker
class="!w-265px"
v-model="formData.craftEndDate"
type="date"
value-format="x"
placeholder="工艺结束日期"
:disabled="!formData.hasCraft"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
class="!w-265px"
v-model="formData.createTime"
type="date"
value-format="x"
placeholder="创建时间"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目变更日期" prop="changeLastDate">
<el-date-picker
class="!w-265px"
v-model="formData.changeLastDate"
type="date"
value-format="x"
placeholder="项目变更日期"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目变更次数" prop="changeNum">
<el-input
class="!w-265px"
placeholder="项目变更次数"
v-model="formData.changeNum"
disabled
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-row>
<el-col :span="24">
<el-form-item label="要求设计结束日期" prop="changeEndTime">
<el-date-picker
class="!w-265px"
v-model="formData.changeEndTime"
type="date"
value-format="x"
placeholder="要求设计结束日期"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">子项目信息</span>
<el-button style="margin-left: 3%" type="warning" size="large" @click="printfClick"
>打印</el-button
>
<el-button style="margin-left: 3%" type="primary" size="large" @click="openUp"
>查看工作</el-button
>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-form
ref="subFormRef"
:model="formData.projectPlanSubs"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-table
:show-overflow-tooltip="true"
@selection-change="handleSelectionChange"
:data="formData.projectPlanSubs"
class="hl-table"
>
<el-table-column type="selection" width="55" />
<el-table-column label="序号" align="center" type="index" width="70px" fixed />
<el-table-column
prop="name"
label="子项目名称"
min-width="140px"
align="center"
fixed
/>
<el-table-column prop="projectSubShortName" min-width="130px" align="center">
<template #header><span class="hl-table_header">*</span>子项目简码</template>
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.projectSubShortName`"
:rules="subFormRules.projectSubShortName"
class="mb-0px!"
>
<el-input
v-model="row.projectSubShortName"
placeholder="子项目简码"
disabled
@change="(name) => handleSubCode(row, name)"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="amount" label="数量" min-width="70px" align="center" />
<el-table-column prop="mouldId" align="center" min-width="130px">
<template #header> 模具类型 </template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.mouldId`" class="mb-0px!">
<el-select
v-model="scope.row.mouldId"
clearable
placeholder="下拉选择"
disabled
@change="(mid) => handleMouldType(scope, mid)"
style="width: 100%"
>
<el-option
v-for="dict in mouldTypeList"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="equipId" align="center" min-width="140px">
<template #header> 设备型号 </template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.equipId`" class="mb-0px!">
<!-- <el-select v-model="scope.row.equipId" clearable placeholder="下拉选择" style="width: 100%">
<el-option v-for="dict in scope.row.equipList" :key="dict.id" :label="dict.name"
:value="dict.id" />
</el-select> -->
<EquipSelect
v-model="scope.row.equipId"
@update:new-value="handleSelectedequip(scope, $event)"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="180px" align="center">
<template #header>毛坯开始日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startBlankDate`" class="mb-0px!">
<el-date-picker
:disabled="row.hasSaveInBlankDetail"
class="!w-265px"
v-model="row.startBlankDate"
type="date"
:disabled-date="disabledFutureDates"
value-format="x"
placeholder="毛坯开始日期"
@change="
handleDateChange(
$index,
row.startBlankDate,
row.blankDate,
'1',
row.blankOwner,
row.id,
'startBlankDate',
'blankDate',
'blankNum',
'start'
)
"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="180px" align="center">
<template #header>毛坯结束日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blankDate`" class="mb-0px!">
<el-date-picker
:disabled="row.hasSaveInBlankDetail"
class="!w-265px"
v-model="row.blankDate"
type="date"
:disabled-date="disabledFutureDates"
value-format="x"
placeholder="毛坯结束日期"
@change="
handleDateChange(
$index,
row.startBlankDate,
row.blankDate,
'1',
row.blankOwner,
row.id,
'startBlankDate',
'blankDate',
'blankNum',
'end'
)
"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
prop="blankNum"
label="毛坯工时"
min-width="110px"
align="center"
/>
<el-table-column min-width="150px" align="center">
<template #header>毛坯负责人</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blankOwner`" class="mb-0px!">
<el-select
:disabled="row.hasSaveInBlankDetail"
class="!w-265px"
v-model="row.blankOwner"
clearable
@change="handleSelectedUser6($index)"
filterable
>
<el-option
v-for="dict in userInit"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<!-- <UserSelect v-model="row.blankOwner" @update:new-value="handleSelectedUser6($index,$event)" @change="handleDateChange($index, row.startBlankDate,row.blankDate,'1',row.blankOwner,row.id)" class="!w-265px"/>-->
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="180px" align="center">
<template #header>3D开始日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startThreeDimDate`" class="mb-0px!">
<el-date-picker
:disabled="row.hasSaveIn3DDetail"
class="!w-265px"
v-model="row.startThreeDimDate"
type="date"
:disabled-date="disabledFutureDates"
value-format="x"
placeholder="3D开始日期"
@change="
handleDateChange(
$index,
row.startThreeDimDate,
row.threeDimDate,
'3',
row.threeDimOwner,
row.id,
'startThreeDimDate',
'threeDimDate',
'threeDimNum',
'start'
)
"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="180" align="center">
<template #header>3D结束日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.threeDimDate`" class="mb-0px!">
<el-date-picker
:disabled="row.hasSaveIn3DDetail"
class="!w-265px"
v-model="row.threeDimDate"
type="date"
value-format="x"
:disabled-date="disabledFutureDates"
placeholder="3D结束日期"
@change="
handleDateChange(
$index,
row.startThreeDimDate,
row.threeDimDate,
'3',
row.threeDimOwner,
row.id,
'startThreeDimDate',
'threeDimDate',
'threeDimNum',
'end'
)
"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
prop="threeDimNum"
label="3D工时"
min-width="90px"
align="center"
/>
<el-table-column min-width="150" align="center">
<template #header>3D负责人</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.threeDimOwner`" class="mb-0px!">
<el-select
:disabled="row.hasSaveIn3DDetail"
class="!w-265px"
v-model="row.threeDimOwner"
clearable
@change="handleSelectedUser8($index)"
filterable
>
<el-option
v-for="dict in userInit"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<!-- <UserSelect v-model="row.threeDimOwner" @update:new-value="handleSelectedUser8($index,$event)" @change="handleDateChange($index, row.startThreeDimDate,row.threeDimDate,'3',row.threeDimOwner,row.id)" class="!w-265px"/>-->
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="180px" align="center">
<template #header>2D开始日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startTwoDimDate`" class="mb-0px!">
<el-date-picker
:disabled="row.hasSaveIn2DDetail"
class="!w-265px"
v-model="row.startTwoDimDate"
type="date"
value-format="x"
:disabled-date="disabledFutureDates"
placeholder="2D开始日期"
@change="
handleDateChange(
$index,
row.startTwoDimDate,
row.twoDimDate,
'2',
row.twoDimOwner,
row.id,
'startTwoDimDate',
'twoDimDate',
'twoDimNum',
'start'
)
"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="180px" align="center">
<template #header>2D结束日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.twoDimDate`" class="mb-0px!">
<el-date-picker
:disabled="row.hasSaveIn2DDetail"
class="!w-265px"
v-model="row.twoDimDate"
type="date"
:disabled-date="disabledFutureDates"
value-format="x"
placeholder="2D结束日期"
@change="
handleDateChange(
$index,
row.startTwoDimDate,
row.twoDimDate,
'2',
row.twoDimOwner,
row.id,
'startTwoDimDate',
'twoDimDate',
'twoDimNum',
'end'
)
"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
prop="twoDimNum"
label="2D工时"
min-width="90px"
align="center"
/>
<el-table-column min-width="150" align="center">
<template #header>2D负责人</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.twoDimOwner`" class="mb-0px!">
<el-select
:disabled="row.hasSaveIn2DDetail"
class="!w-265px"
v-model="row.twoDimOwner"
clearable
@change="handleSelectedUser7($index)"
filterable
>
<el-option
v-for="dict in userInit"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<!-- <UserSelect v-model="row.twoDimOwner" @update:new-value="handleSelectedUser7($index,$event)" @change="handleDateChange($index, row.startTwoDimDate,row.twoDimDate,'2',row.twoDimOwner,row.id)" class="!w-265px"/>-->
</el-form-item>
</template>
</el-table-column>
<el-table-column
prop="compositionName"
label="主要材质"
min-width="100px"
align="center"
/>
<el-table-column
prop="projectSubCode"
label="子项目编号"
min-width="180px"
align="center"
/>
<el-table-column prop="unit" label="单位" min-width="90px" align="center">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.unit" />
</template>
</el-table-column>
<el-table-column prop="id" label="id" min-width="80px" align="center" />
</el-table>
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">工艺流程</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-table :data="formData.craftInfos" class="hl-table">
<el-table-column label="序号" prop="id" type="index" width="80" />
<el-table-column min-width="120" prop="name" label="工艺流程" align="center" />
<el-table-column min-width="150" label="开始日期" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startDate`" class="mb-0px!">
<el-date-picker
style="width: 100%"
v-model="row.startDate"
type="date"
value-format="x"
placeholder="开始日期"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="150" label="结束日期" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.endDate`" class="mb-0px!">
<el-date-picker
style="width: 100%"
v-model="row.endDate"
type="date"
value-format="x"
placeholder="结束日期"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="150" label="责任人" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.owner`" class="mb-0px!">
<!-- <el-select style="width: 100%" v-model="row.owner" clearable filterable @update:new-value="handleSelectedUser9($index,$event)" v-if="row.name!='检验'&&row.name!='预验收'&&row.name!='装配'">-->
<!-- <el-option v-for="dict in mergedArray" :key="dict.id"-->
<!-- :label="dict.username+' '+dict.nickname" :value="dict.id" />-->
<!-- </el-select>-->
<!-- <el-select style="width: 100%" v-model="row.owner" clearable filterable @update:new-value="handleSelectedUser9($index,$event)" v-if="row.name=='检验'||row.name=='预验收'">-->
<!-- <el-option v-for="dict in userInit2" :key="dict.id"-->
<!-- :label="dict.username+' '+dict.nickname" :value="dict.id" />-->
<!-- </el-select>-->
<!-- <el-select style="width: 100%" v-model="row.owner" clearable filterable @update:new-value="handleSelectedUser9($index,$event)" v-if="row.name=='装配'">-->
<!-- <el-option v-for="dict in mergedArray1" :key="dict.id"-->
<!-- :label="dict.username+' '+dict.nickname" :value="dict.id" />-->
<!-- </el-select>-->
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '母模/毛坯'"
>
<el-option
v-for="dict in mergedArray"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '粗,精加工'"
>
<el-option
v-for="dict in mergedArray1"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '热处理'"
>
<el-option
v-for="dict in mergedArray2"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '电火花'"
>
<el-option
v-for="dict in mergedArray3"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '打孔/抛光'"
>
<el-option
v-for="dict in mergedArray4"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '装配'"
>
<el-option
v-for="dict in mergedArray5"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '预验收'"
>
<el-option
v-for="dict in mergedArray6"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<el-select
style="width: 100%"
v-model="row.owner"
clearable
filterable
@update:new-value="handleSelectedUser9($index, $event)"
v-if="row.name == '检验'"
>
<el-option
v-for="dict in mergedArray7"
:key="dict.id"
:label="dict.username + ' ' + dict.nickname"
:value="dict.id"
/>
</el-select>
<!-- <UserSelect v-model="row.owner" @update:new-value="handleSelectedUser9($index,$event)" class="!w-265px"/>-->
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="350" label="备注" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.description`" class="mb-0px!">
<el-input style="width: 100%" v-model="row.description" placeholder="备注" />
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
<el-button @click="() => router.back()" size="large" style="margin-left: 5rem"
>取 消</el-button
>
<el-button @click="submitForm" type="success" size="large">保 存</el-button>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-table
:data="formData.operateLogs"
class="hl-table"
:style="{ height: formData.operateLogs.length > 10 ? '450px' : '' }"
>
<el-table-column prop="type" label="操作" align="center" width="200px">
<template #default="scope">
{{ getDictLabel(DICT_TYPE.SYSTEM_OPERATE_TYPE, scope.row.type) }}
</template>
</el-table-column>
<el-table-column prop="userNickname" label="操作人" align="center" />
<el-table-column
label="操作时间"
align="center"
prop="startTime"
width="220"
:formatter="dateFormatter"
/>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
</el-form>
</el-card>
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
<insert ref="insert" />
<ProjectSubDialog
:title="dialogTitle"
width="80%"
v-model="dialogVisible"
:parent-method="parentMethod"
:parent-methods="clouse"
:projectOrderSubs="dataList"
:ownerId="ownerId"
:dateOne="dateOne"
:dateTwo="dateTwo"
:id="id"
:diffDays="diffDays"
:typeNames="typeNames"
@update="handleUpdate"
:showCloseProp="false"
center
/><!-- :ownerId="ownerId" :dateOne="dateOne" :dateTwo="dateTwo" :id="id" :diffDays="diffDays" :typeNames="typeNames" -->
<printDialog ref="printref" :minAmount="minAmount" :formData="formData" />
</template>
<script setup lang="ts">
import { inject, ref } from 'vue'
import { getIntDictOptions, getStrDictOptions, getDictLabel, DICT_TYPE } from '@/utils/dict'
import { betweenDay, formatDate, dateFormatter, betweenDay1 } from '@/utils/formatTime'
import printDialog from './printDialog.vue'
import { Search, Plus } from '@element-plus/icons-vue'
import ProjectOrderDialog from '@/views/heli/plan/projectOrderDialog.vue'
import ProjectSubDialog from '@/views/heli/plan/projectSubDialog.vue'
import * as PlanApi from '@/api/heli/plan'
import * as PlanSubApi from '@/api/heli/plansub'
import * as ProjectOrderApi from '@/api/heli/projectorder'
import * as CustomerApi from '@/api/heli/customer'
import * as UserApi from '@/api/system/user'
import * as EquipApi from '@/api/heli/equip'
import * as MouldTypeApi from '@/api/heli/mouldtype'
import { getOperateLogPage } from '@/api/system/operatelog'
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
import EquipSelect from '@/views/heli/hlvuestyle/equipSelect.vue'
import * as ProjectLeaderApi from '@/api/heli/projectleader'
import * as shopCalendarApi from '@/api/heli/shopCalendar'
import * as TaskDispatchApi from '@/api/heli/taskdispatch'
import * as planSubDetailApi from '@/api/heli/plansubdetail'
import { verification } from '@/api/heli/plan'
import Insert from "@/views/heli/plan/insert.vue";
const printref = ref()
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const { query } = useRoute()
const router = useRouter()
const reload = inject('reload')
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('设计时间冲突信息窗') // 弹窗的标题
const fuzerenId = ref()
const startTimeOne = ref()
const endTimeTwo = ref()
const dateThree = ref()
const formRef = ref() // 表单
const subFormRef = ref() //子表单 Ref
const prod = ref({
projectPlanSubs: []
})
const currentTime = ref('')
const prods = ref({
projectPlanSubs: []
})
const formData = ref({
id: undefined,
projectId: undefined,
projectPlanId: undefined,
projectOwner: undefined,
hasCraft: 1,
craftOwner: undefined,
craftStartTime: undefined,
craftEndTime: undefined,
editor: undefined,
editorDate: undefined,
auditor: undefined,
auditDate: undefined,
approver: undefined,
approveDate: undefined,
description: undefined,
status: undefined,
createTime: undefined,
operateLogs: [],
projectOrderSubs: [],
projectPlanSubs: [],
craftInfos: [],
craftContent: undefined,
changeEndTime: undefined,
castOwner: undefined,
hasCast: 1,
castStartDate: undefined,
castEndDate: undefined
})
const ownerId = ref('')
const dateOne = ref('')
const dateTwo = ref('')
const id = ref('')
const diffDays = ref('')
const typeNames = ref('')
const dataList = ref({
projectOrderSubs: []
})
const dataListShuju = ref([])
const dataListShujus = ref([])
const formRules = reactive({
projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
projectOwner: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }]
})
const subFormRules = reactive({
projectSubShortName: [{ required: true, message: '子项目简称不能为空', trigger: 'blur' }]
})
const projectOrderDialog = ref()
const insert= ref()
const openProjectOrderDialog = () => {
projectOrderDialog.value?.open()
}
const clickItem = ref([])
const handleSelectionChange = (val) => {
clickItem.value = val
}
const disabledFutureDates = (time) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
return time.getTime() < today.getTime()
}
const handleSelectedProjectOrder = (arr: ProjectOrderVO[]) => {
if (arr) {
formData.value.projectCode = arr.code
formData.value.projectStatus = arr.orderStatus
formData.value.customerName = arr.customerName
formData.value.projectName = arr.projectName
formData.value.businessMan = arr.businessManName
formData.value.projectStartTime = arr.projectStartTime
formData.value.projectEndTime = arr.projectEndTime
formData.value.businessLine = arr.businessLine
formData.value.property = arr.property
formData.value.isUrgency = arr.isUrgency
formData.value.projectId = arr.id
handleInitPlanSub()
}
}
const parentMethod = async () => {
// 检查是否超过要求设计日期
let overdueTime = null // 初始化变量
let projectName = null // 初始化变量
const isOverdue = dataList.value.projectOrderSubs.some((sub) => {
if (sub.changeEndTime) {
const isOverdueSub =
sub.blankDate > sub.changeEndTime ||
sub.twoDimDate > sub.changeEndTime ||
sub.threeDimDate > sub.changeEndTime
// 如果当前 sub 是超期的,将 sub.changeEndTime 赋值给 overdueTime
if (isOverdueSub) {
overdueTime = sub.changeEndTime
projectName = sub.projectSubName
}
return isOverdueSub
}
return false
})
/* const isOverdue = dataList.value.projectOrderSubs.some(sub => {
if (sub.changeEndTime) {
return sub.blankDate > sub.changeEndTime ||
sub.twoDimDate > sub.changeEndTime ||
sub.threeDimDate > sub.changeEndTime;
}
return false;
}); */
if (isOverdue) {
message.error(
projectName +
',超过要求设计结束日期-' +
formatDate(overdueTime, 'YYYY-MM-DD') +
',不允许插活'
)
return // 如果超过日期,直接返回,不执行后续代码
}
dialogVisible.value = false
// 更新 formData 中的数据
dataList.value.projectOrderSubs.forEach((sub) => {
const matchingPlanSub = formData.value.projectPlanSubs.find((planSub) => planSub.id === sub.id)
if (matchingPlanSub) {
matchingPlanSub.startBlankDate = sub.startBlankDate
matchingPlanSub.blankDate = sub.blankDate
matchingPlanSub.startTwoDimDate = sub.startTwoDimDate
matchingPlanSub.twoDimDate = sub.twoDimDate
matchingPlanSub.startThreeDimDate = sub.startThreeDimDate
matchingPlanSub.threeDimDate = sub.threeDimDate
}
})
// 直接调用提交方法
await submitForm()
// 清空数据
dataListShuju.value = []
}
/* const parentMethod = () => {
//先判断是否超过要求设计日期,超过时给出提醒,不允许插活
for(var a= 0;a<dataList.value.projectOrderSubs.length;a++){
if(dataList.value.projectOrderSubs[a].changeEndTime){
if(dataList.value.projectOrderSubs[a].blankDate>dataList.value.projectOrderSubs[a].changeEndTime
|| dataList.value.projectOrderSubs[a].twoDimDate>dataList.value.projectOrderSubs[a].changeEndTime
|| dataList.value.projectOrderSubs[a].threeDimDate>dataList.value.projectOrderSubs[a].changeEndTime)
{
message.error("本次插活已经超过要求设计结束日期,无法插活");
}
}
}
dialogVisible.value = false
for(var a= 0;a<dataList.value.projectOrderSubs.length;a++){
for(var b=0;b<formData.value.projectPlanSubs.length;b++){
if(dataList.value.projectOrderSubs[a].id == formData.value.projectPlanSubs[b].id){
formData.value.projectPlanSubs[b].startBlankDate = dataList.value.projectOrderSubs[a].startBlankDate
formData.value.projectPlanSubs[b].blankDate = dataList.value.projectOrderSubs[a].blankDate
formData.value.projectPlanSubs[b].startTwoDimDate = dataList.value.projectOrderSubs[a].startTwoDimDate
formData.value.projectPlanSubs[b].twoDimDate = dataList.value.projectOrderSubs[a].twoDimDate
formData.value.projectPlanSubs[b].startThreeDimDate= dataList.value.projectOrderSubs[a].startThreeDimDate
formData.value.projectPlanSubs[b].threeDimDate =dataList.value.projectOrderSubs[a].threeDimDate
}
}
}
//直接调用提交方法
submitForm()
dataListShuju.value = []; */
/* if(formData.value.changeEndTime){
if(currentTime.value>formData.value.changeEndTime){
message.error("本次插活已经超过要求设计结束日期,无法插活");
}else{
//确定插活后,将日期进行更新,并在根据最后一个日期继续查看后面的时间是否有冲突
dialogVisible.value = false
console.log(dataList.value.projectOrderSubs);
for(var a= 0;a<dataList.value.projectOrderSubs.length;a++){
for(var b=0;b<formData.value.projectPlanSubs.length;b++){
if(dataList.value.projectOrderSubs[a].id == formData.value.projectPlanSubs[b].id){
formData.value.projectPlanSubs[b].startBlankDate = dataList.value.projectOrderSubs[a].startBlankDate
formData.value.projectPlanSubs[b].blankDate = dataList.value.projectOrderSubs[a].blankDate
formData.value.projectPlanSubs[b].startTwoDimDate = dataList.value.projectOrderSubs[a].startTwoDimDate
formData.value.projectPlanSubs[b].twoDimDate = dataList.value.projectOrderSubs[a].twoDimDate
formData.value.projectPlanSubs[b].startThreeDimDate= dataList.value.projectOrderSubs[a].startThreeDimDate
formData.value.projectPlanSubs[b].threeDimDate =dataList.value.projectOrderSubs[a].threeDimDate
}
}
}
}
}else{
//确定插活后,将日期进行更新,并在根据最后一个日期继续查看后面的时间是否有冲突
dialogVisible.value = false
console.log(dataList.value.projectOrderSubs);
for(var a= 0;a<dataList.value.projectOrderSubs.length;a++){
for(var b=0;b<formData.value.projectPlanSubs.length;b++){
if(dataList.value.projectOrderSubs[a].id == formData.value.projectPlanSubs[b].id){
formData.value.projectPlanSubs[b].startBlankDate = dataList.value.projectOrderSubs[a].startBlankDate
formData.value.projectPlanSubs[b].blankDate = dataList.value.projectOrderSubs[a].blankDate
formData.value.projectPlanSubs[b].startTwoDimDate = dataList.value.projectOrderSubs[a].startTwoDimDate
formData.value.projectPlanSubs[b].twoDimDate = dataList.value.projectOrderSubs[a].twoDimDate
formData.value.projectPlanSubs[b].startThreeDimDate= dataList.value.projectOrderSubs[a].startThreeDimDate
formData.value.projectPlanSubs[b].threeDimDate =dataList.value.projectOrderSubs[a].threeDimDate
}
}
}
} */
//};
const clouse = () => {
dialogVisible.value = false
dataListShuju.value = []
}
const openUp=()=>{
insert.value?.open()
}
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
dates: new Date().getTime().toString(),
times: undefined,
xingqj: undefined,
ifjiejiari: undefined
})
/* 计算设计天数 */
const handleDateChange = async (
index,
startBlankDate,
blankDate,
num,
ownder,
id,
startField,
endField,
dataNumField,
type
) => {
var nowDa = new Date()
var nowDataStr = nowDa.toLocaleDateString('en-CA')
dataListShuju.value = []
const rowData = formData.value.projectPlanSubs[index]
// 使用一个数组来收集所有遇到的错误信息
const errors = []
var deleteBlankNum = false;
var deleteEndNum = false;
// --- 检查开始日期 ---
if (typeof startBlankDate === 'undefined' || startBlankDate === null || startBlankDate === '') {
errors.push('请选择开始日期,否则无法计算设计天数')
deleteBlankNum = true;
} else {
const starDateStr = new Date(startBlankDate).toLocaleDateString('en-CA')
if (starDateStr < nowDataStr) {
errors.push('开始日期只能选择当天或往后的时间!')
// 标记需要清空,但先不清空,等最后统一处理
startBlankDate = null
} else {
const queryHolidayParams = { queryDate: startBlankDate }
const isHoliday = await shopCalendarApi.isHoliday(queryHolidayParams)
if (!isHoliday) {
message.error(starDateStr + '为节假日,不允许选择')
rowData[startField] = null
return
}
}
}
// --- 检查结束日期 ---
if (typeof blankDate === 'undefined' || blankDate === null || blankDate === '') {
errors.push('请选择结束日期,否则无法计算设计天数')
deleteEndNum = true;
} else {
const endDateStr = new Date(blankDate).toLocaleDateString('en-CA')
if (endDateStr < nowDataStr) {
errors.push('结束日期只能选择当天或往后的时间!')
blankDate = null
} else {
const queryHolidayParams = { queryDate: blankDate }
const isHoliday = await shopCalendarApi.isHoliday(queryHolidayParams)
if (!isHoliday) {
// 注意:你的原代码这里是 !isHoliday我根据你的提示语修正了逻辑
message.error(endDateStr + '为节假日,不允许选择')
rowData[endField] = null
return
}
}
}
// --- 统一处理错误和更新数据 ---
if (errors.length > 0) {
// 如果有错误,将所有错误信息合并后一次性弹出
message.error(errors.join('\n')) // 使用 '\n' 换行显示多个错误
// 统一更新 rowData清空无效的日期
if (startBlankDate === null) {
rowData[dataNumField] = null
rowData[startField] = null
}
if (blankDate === null) {
rowData[dataNumField] = null
rowData[endField] = null
}
return // 最后再 return终止函数
}
//用户选择完成后要取数据库中检索是否存在时间冲突,存在弹出插活框
if (startBlankDate > blankDate) {
message.error('开始时间必须早于结束时间,否则无法计算设计天数,请检查')
if (type == 'end') {
rowData[endField] = null
} else {
rowData[startField] = null
}
rowData[dataNumField] = null
return
}
//调用查询天数的后端接口
getSearchRlTs(startBlankDate, blankDate, index, num, ownder)
//计算天数
// 将日期字符串转换为Date对象
const date1 = new Date(startBlankDate)
const date2 = new Date(blankDate)
// 计算两个日期之间的天数差
const timeDiff = Math.abs(date2.getTime() - date1.getTime())
const diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24))
const tianshu = diffDays + 1
}
const getSearchRlTs = async (
startDateTime: string,
endDateTime: string,
index: number,
num: string,
ownder: number
) => {
let data = await PlanSubApi.getSearchRlTsS(
formatDate(startDateTime, 'YYYY-MM-DD'),
formatDate(endDateTime, 'YYYY-MM-DD')
)
if (num === '1') {
//调用接口查询检索设计时间是否冲突
formData.value.projectPlanSubs[index].blankNum = data
// formatDate(startBlankDate,'YYYY-MM-DD')
// if(ownder){
// prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
// startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
// endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
// fuzerenId.value = ownder;
// getOwnderList(index)
// }
/* getOwnderList(index,ownder,startBlankDate,blankDate,id) */
} else if (num === '2') {
//调用接口查询检索设计时间是否冲突
formData.value.projectPlanSubs[index].twoDimNum = data
// if(ownder){
// prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
// startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
// endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
// fuzerenId.value = ownder;
// getOwnderLists(index)
// }
} else {
formData.value.projectPlanSubs[index].threeDimNum = data
// if(ownder){
// prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
// startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
// endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
// fuzerenId.value = ownder;
// getOwnderListss(index)
// }
}
}
//选择3D
const getOwnderListss = async (index: number) => {
prod.value.projectPlanSubs[index].projectPlanId = formData.value.id
prod.value.projectPlanSubs[index].type = 3
dataListShujus.value = []
const currentRow = prod.value.projectPlanSubs[index]
dateThree.value = currentRow.threeDimDate
const blankOwner = currentRow.threeDimOwner
dataListShujus.value.push(prod.value.projectPlanSubs[index])
// 递归处理函数
const processRecursive = async (i: number) => {
const datas = { ...prod.value.projectPlanSubs[i] }
if (i !== index && prod.value.projectPlanSubs[i].threeDimOwner === blankOwner) {
if (
isInRange(
currentRow.startThreeDimDate,
currentRow.threeDimDate,
prod.value.projectPlanSubs[i].startThreeDimDate,
prod.value.projectPlanSubs[i].threeDimDate
)
) {
const datalists = await PlanSubApi.getOwnderPlanSub(
formatDate(currentRow.threeDimDate, 'YYYY-MM-DD'),
prod.value.projectPlanSubs[i].threeDimNum
)
prod.value.projectPlanSubs[i].startThreeDimDate = datalists[0].dates
prod.value.projectPlanSubs[i].threeDimDate = datalists[1].dates
datas.startThreeDimDates = datas.startThreeDimDate
datas.threeDimDates = datas.threeDimDate
datas.startThreeDimDate = datalists[0].dates
datas.threeDimDate = datalists[1].dates
datas.changeEndTime = formData.value.changeEndTime
datas.projectPlanId = formData.value.id
datas.type = 2
currentTime.value = datalists[1].dates
dateThree.value = datalists[1].dates
dataListShuju.value.push(datas)
dataListShujus.value.push(datas)
await processRecursive(i) // 递归调用
}
}
}
// 处理所有相关行
for (let i = 0; i < prod.value.projectPlanSubs.length; i++) {
await processRecursive(i)
}
// 去重逻辑
for (let a = 0; a < dataListShuju.value.length; a++) {
for (let b = a + 1; b < dataListShuju.value.length; b++) {
if (
dataListShuju.value[a] &&
dataListShuju.value[a].id &&
dataListShuju.value[b] &&
dataListShuju.value[b].id &&
dataListShuju.value[a].id === dataListShuju.value[b].id
) {
dataListShuju.value[a].startThreeDimDate = dataListShuju.value[b].startThreeDimDate
dataListShuju.value[a].threeDimDate = dataListShuju.value[b].threeDimDate
dataListShuju.value.splice(b, 1)
b--
}
}
}
// 更新数据
dataList.value.projectOrderSubs = dataListShuju.value
ownerId.value = blankOwner
dateOne.value = formatDate(currentRow.startThreeDimDate, 'YYYY-MM-DD')
dateTwo.value = formatDate(currentRow.threeDimDate, 'YYYY-MM-DD')
id.value = currentRow.id
diffDays.value = '1'
typeNames.value = '1'
// 递归执行完毕后,执行以下代码
const datalistss = await PlanSubApi.getOwnderPlanChaHuo(dataListShujus.value) //(formData.value.id, fuzerenId.value, startTimeOne.value, endTimeTwo.value, "", 0, 1, formatDate(dateThree.value, 'YYYY-MM-DD'));
prods.value.projectPlanSubs = []
for (let a = 0; a < datalistss.length; a++) {
dataListShuju.value.push(datalistss[a])
prods.value.projectPlanSubs.push(datalistss[a])
}
let lastEndTime = null
for (let a = 0; a < prods.value.projectPlanSubs.length; a++) {
const prodItem = { ...prods.value.projectPlanSubs[a] }
for (let b = 0; b < prod.value.projectPlanSubs.length; b++) {
const existingItem = { ...prod.value.projectPlanSubs[b] }
if (existingItem.threeDimOwner === prodItem.threeDimOwner) {
if (
isInRange(
prodItem.startThreeDimDate,
prodItem.threeDimDate,
existingItem.startThreeDimDate,
existingItem.threeDimDate
)
) {
const queryStartTime = lastEndTime || prodItem.threeDimDate
const datalists = await PlanSubApi.getOwnderPlanSub(
formatDate(queryStartTime, 'YYYY-MM-DD'),
prod.value.projectPlanSubs[b].threeDimNum
)
prod.value.projectPlanSubs[b].startThreeDimDate = datalists[0].dates
prod.value.projectPlanSubs[b].threeDimDate = datalists[1].dates
existingItem.startThreeDimDates = existingItem.startThreeDimDate
existingItem.threeDimDates = existingItem.threeDimDate
existingItem.startThreeDimDate = datalists[0].dates
existingItem.threeDimDate = datalists[1].dates
lastEndTime = datalists[1].dates
existingItem.changeEndTime = formData.value.changeEndTime
existingItem.projectPlanId = formData.value.id
existingItem.type = 2
currentTime.value = datalists[1].dates
dateThree.value = datalists[1].dates
dataListShuju.value.push(existingItem)
dataListShujus.value.push(existingItem)
}
}
}
}
// 显示对话框
if (dataList.value.projectOrderSubs.length > 0) {
dialogVisible.value = true
}
}
const printfClick = () => {
if (clickItem.value == null || clickItem.value.length == 0) {
message.error('至少选择一项后,打印!')
return
}
for (var i = 0; i < clickItem.value.length; i++) {
var item = clickItem.value[i]
if (item.id == null) {
message.error('请先保存后再打印!')
return
}
if (item.projectSubShortName == null || item.projectSubShortName == '') {
message.error(
item.projectSubName == null
? '子项目简码不得为空'
: item.projectSubName + '的子项目简码不得为空!'
)
return
}
}
printref.value.open(clickItem.value)
}
/* const getOwnderListss = async (index: number) => {
//根据行索引获取到编辑行
const currentRow = prod.value.projectPlanSubs[index];
//获取到负责人ID
const blankOwner = currentRow.threeDimOwner;
for (let i = 0; i < prod.value.projectPlanSubs.length; i++) {
const datas = {...prod.value.projectPlanSubs[i] }
if (i!== index && prod.value.projectPlanSubs[i].threeDimOwner === blankOwner) {
if (isInRange(currentRow.startThreeDimDate,currentRow.threeDimDate, prod.value.projectPlanSubs[i].startThreeDimDate,prod.value.projectPlanSubs[i].threeDimDate)) {
const datalists = await PlanSubApi.getOwnderPlanSub(formatDate(currentRow.threeDimDate,'YYYY-MM-DD'),prod.value.projectPlanSubs[i].threeDimNum)
prod.value.projectPlanSubs[i].startThreeDimDate = datalists[0].dates;
prod.value.projectPlanSubs[i].threeDimDate = datalists[1].dates;
datas.startThreeDimDate = datalists[0].dates;
datas.threeDimDate = datalists[1].dates;
datas.changeEndTime = formData.value.changeEndTime;
//将最后一次更新的数据的最晚时间进行记录,用于判断此次插活是否超过要求设计结束日期
currentTime.value = datalists[1].dates;
//赋值给集合
dataListShuju.value.push(datas);
getOwnderListss(i);
}
}
}
for(let a=0;a<dataListShuju.value.length;a++){
for(let b=a+1;b<dataListShuju.value.length;b++){
if (dataListShuju.value[a] && dataListShuju.value[a].id && dataListShuju.value[b] && dataListShuju.value[b].id &&dataListShuju.value[a].id === dataListShuju.value[b].id) {
dataListShuju.value[a].startThreeDimDate = dataListShuju.value[b].startThreeDimDate;
dataListShuju.value[a].threeDimDate = dataListShuju.value[b].threeDimDate;
// 删除下标为b的数据
dataListShuju.value.splice(b, 1);
// 由于删除了一个元素,需要调整内层循环的索引
b--;
}
}
}
dataList.value.projectOrderSubs = dataListShuju.value
ownerId.value = blankOwner
dateOne.value = formatDate(currentRow.startBlankDate,'YYYY-MM-DD')
dateTwo.value = formatDate(currentRow.blankDate,'YYYY-MM-DD')
id.value = currentRow.id
diffDays.value = '1'
typeNames.value = '1'
if(dataList.value.projectOrderSubs.length>0){
dialogVisible.value = true;
}
// 通知子组件数据已经更新
//emit('update');
} */
//选择2D
const getOwnderLists = async (index: number) => {
prod.value.projectPlanSubs[index].projectPlanId = formData.value.id
prod.value.projectPlanSubs[index].type = 2
dataListShujus.value = []
const currentRow = prod.value.projectPlanSubs[index]
dateThree.value = currentRow.twoDimDate
const blankOwner = currentRow.twoDimOwner
dataListShujus.value.push(prod.value.projectPlanSubs[index])
// 递归处理函数
const processRecursive = async (i: number) => {
const datas = { ...prod.value.projectPlanSubs[i] }
if (i !== index && prod.value.projectPlanSubs[i].twoDimOwner === blankOwner) {
if (
isInRange(
currentRow.startTwoDimDate,
currentRow.twoDimDate,
prod.value.projectPlanSubs[i].startTwoDimDate,
prod.value.projectPlanSubs[i].twoDimDate
)
) {
const datalists = await PlanSubApi.getOwnderPlanSub(
formatDate(currentRow.twoDimDate, 'YYYY-MM-DD'),
prod.value.projectPlanSubs[i].twoDimNum
)
prod.value.projectPlanSubs[i].startTwoDimDate = datalists[0].dates
prod.value.projectPlanSubs[i].twoDimDate = datalists[1].dates
datas.startTwoDimDates = datas.startTwoDimDate
datas.twoDimDates = datas.twoDimDate
datas.startTwoDimDate = datalists[0].dates
datas.twoDimDate = datalists[1].dates
datas.changeEndTime = formData.value.changeEndTime
datas.projectPlanId = formData.value.id
datas.type = 2
currentTime.value = datalists[1].dates
dateThree.value = datalists[1].dates
dataListShuju.value.push(datas)
dataListShujus.value.push(datas)
await processRecursive(i) // 递归调用
}
}
}
// 处理所有相关行
for (let i = 0; i < prod.value.projectPlanSubs.length; i++) {
await processRecursive(i)
}
// 去重逻辑
for (let a = 0; a < dataListShuju.value.length; a++) {
for (let b = a + 1; b < dataListShuju.value.length; b++) {
if (
dataListShuju.value[a] &&
dataListShuju.value[a].id &&
dataListShuju.value[b] &&
dataListShuju.value[b].id &&
dataListShuju.value[a].id === dataListShuju.value[b].id
) {
dataListShuju.value[a].startTwoDimDate = dataListShuju.value[b].startTwoDimDate
dataListShuju.value[a].twoDimDate = dataListShuju.value[b].twoDimDate
dataListShuju.value.splice(b, 1)
b--
}
}
}
// 更新数据
dataList.value.projectOrderSubs = dataListShuju.value
ownerId.value = blankOwner
dateOne.value = formatDate(currentRow.startTwoDimDate, 'YYYY-MM-DD')
dateTwo.value = formatDate(currentRow.twoDimDate, 'YYYY-MM-DD')
id.value = currentRow.id
diffDays.value = '1'
typeNames.value = '1'
// 递归执行完毕后,执行以下代码
const datalistss = await PlanSubApi.getOwnderPlanChaHuo(dataListShujus.value) //(formData.value.id, fuzerenId.value, startTimeOne.value, endTimeTwo.value, "", 0, 1, formatDate(dateThree.value, 'YYYY-MM-DD'));
prods.value.projectPlanSubs = []
for (let a = 0; a < datalistss.length; a++) {
dataListShuju.value.push(datalistss[a])
prods.value.projectPlanSubs.push(datalistss[a])
}
let lastEndTime = null
for (let a = 0; a < prods.value.projectPlanSubs.length; a++) {
const prodItem = { ...prods.value.projectPlanSubs[a] }
for (let b = 0; b < prod.value.projectPlanSubs.length; b++) {
const existingItem = { ...prod.value.projectPlanSubs[b] }
if (existingItem.twoDimOwner === prodItem.twoDimOwner) {
if (
isInRange(
prodItem.startTwoDimDate,
prodItem.twoDimDate,
existingItem.startTwoDimDate,
existingItem.twoDimDate
)
) {
const queryStartTime = lastEndTime || prodItem.twoDimDate
const datalists = await PlanSubApi.getOwnderPlanSub(
formatDate(queryStartTime, 'YYYY-MM-DD'),
prod.value.projectPlanSubs[b].twoDimNum
)
prod.value.projectPlanSubs[b].startTwoDimDate = datalists[0].dates
prod.value.projectPlanSubs[b].twoDimDate = datalists[1].dates
existingItem.startTwoDimDates = existingItem.startTwoDimDate
existingItem.twoDimDates = existingItem.twoDimDate
existingItem.startTwoDimDate = datalists[0].dates
existingItem.twoDimDate = datalists[1].dates
lastEndTime = datalists[1].dates
existingItem.changeEndTime = formData.value.changeEndTime
existingItem.projectPlanId = formData.value.id
existingItem.type = 2
currentTime.value = datalists[1].dates
dateThree.value = datalists[1].dates
dataListShuju.value.push(existingItem)
dataListShujus.value.push(existingItem)
}
}
}
}
// 显示对话框
if (dataList.value.projectOrderSubs.length > 0) {
dialogVisible.value = true
}
}
/* const getOwnderLists = async (index: number) => {
const currentRow = prod.value.projectPlanSubs[index];
//获取到负责人ID
const blankOwner = currentRow.twoDimOwner;
for (let i = 0; i < prod.value.projectPlanSubs.length; i++) {
const datas = {...prod.value.projectPlanSubs[i] }
if (i!== index && prod.value.projectPlanSubs[i].twoDimOwner === blankOwner) {
if (isInRange(currentRow.startTwoDimDate,currentRow.twoDimDate, prod.value.projectPlanSubs[i].startTwoDimDate,prod.value.projectPlanSubs[i].twoDimDate)) {
const datalists = await PlanSubApi.getOwnderPlanSub(formatDate(currentRow.twoDimDate,'YYYY-MM-DD'),prod.value.projectPlanSubs[i].twoDimNum)
prod.value.projectPlanSubs[i].startTwoDimDate = datalists[0].dates;
prod.value.projectPlanSubs[i].twoDimDate = datalists[1].dates;
datas.startTwoDimDate = datalists[0].dates;
datas.twoDimDate = datalists[1].dates;
datas.changeEndTime = formData.value.changeEndTime;
currentTime.value = datalists[1].dates;
//赋值给集合
dataListShuju.value.push(datas);
getOwnderLists(i);
}
}
}
for(let a=0;a<dataListShuju.value.length;a++){
for(let b=a+1;b<dataListShuju.value.length;b++){
if (dataListShuju.value[a] && dataListShuju.value[a].id && dataListShuju.value[b] && dataListShuju.value[b].id &&dataListShuju.value[a].id === dataListShuju.value[b].id) {
dataListShuju.value[a].startTwoDimDate = dataListShuju.value[b].startTwoDimDate;
dataListShuju.value[a].twoDimDate = dataListShuju.value[b].twoDimDate;
// 删除下标为b的数据
dataListShuju.value.splice(b, 1);
// 由于删除了一个元素,需要调整内层循环的索引
b--;
}
}
}
dataList.value.projectOrderSubs = dataListShuju.value
ownerId.value = blankOwner
dateOne.value = formatDate(currentRow.startBlankDate,'YYYY-MM-DD')
dateTwo.value = formatDate(currentRow.blankDate,'YYYY-MM-DD')
id.value = currentRow.id
diffDays.value = '1'
typeNames.value = '1'
if(dataList.value.projectOrderSubs.length>0){
dialogVisible.value = true;
}
} */
// 选择毛坯 ,ownder: number,newdateOne: number,newdateTwo: number,newid:number
const getOwnderList = async (index: number) => {
prod.value.projectPlanSubs[index].projectPlanId = formData.value.id
prod.value.projectPlanSubs[index].type = 1
dataListShujus.value = []
const currentRow = prod.value.projectPlanSubs[index]
dateThree.value = currentRow.blankDate
const blankOwner = currentRow.blankOwner
dataListShujus.value.push(prod.value.projectPlanSubs[index])
// 递归处理函数
const processRecursive = async (i: number) => {
const datas = { ...prod.value.projectPlanSubs[i] }
if (i !== index && prod.value.projectPlanSubs[i].blankOwner === blankOwner) {
if (
isInRange(
currentRow.startBlankDate,
currentRow.blankDate,
prod.value.projectPlanSubs[i].startBlankDate,
prod.value.projectPlanSubs[i].blankDate
)
) {
const datalists = await PlanSubApi.getOwnderPlanSub(
formatDate(currentRow.blankDate, 'YYYY-MM-DD'),
prod.value.projectPlanSubs[i].blankNum
)
prod.value.projectPlanSubs[i].startBlankDate = datalists[0].dates
prod.value.projectPlanSubs[i].blankDate = datalists[1].dates
datas.startBlankDates = datas.startBlankDate
datas.blankDates = datas.blankDate
datas.startBlankDate = datalists[0].dates
datas.blankDate = datalists[1].dates
datas.changeEndTime = formData.value.changeEndTime
datas.projectPlanId = formData.value.id
currentTime.value = datalists[1].dates
dateThree.value = datalists[1].dates
datas.type = 1
dataListShuju.value.push(datas)
dataListShujus.value.push(datas)
await processRecursive(i) // 递归调用
}
}
}
// 处理所有相关行
for (let i = 0; i < prod.value.projectPlanSubs.length; i++) {
await processRecursive(i)
}
// 去重逻辑
for (let a = 0; a < dataListShuju.value.length; a++) {
for (let b = a + 1; b < dataListShuju.value.length; b++) {
if (
dataListShuju.value[a] &&
dataListShuju.value[a].id &&
dataListShuju.value[b] &&
dataListShuju.value[b].id &&
dataListShuju.value[a].id === dataListShuju.value[b].id
) {
dataListShuju.value[a].startBlankDate = dataListShuju.value[b].startBlankDate
dataListShuju.value[a].blankDate = dataListShuju.value[b].blankDate
dataListShuju.value.splice(b, 1)
b--
}
}
}
// 更新数据
dataList.value.projectOrderSubs = dataListShuju.value
ownerId.value = blankOwner
dateOne.value = formatDate(currentRow.startBlankDate, 'YYYY-MM-DD')
dateTwo.value = formatDate(currentRow.blankDate, 'YYYY-MM-DD')
id.value = currentRow.id
diffDays.value = '1'
typeNames.value = '1'
// 递归执行完毕后,执行以下代码
const datalistss = await PlanSubApi.getOwnderPlanChaHuo(dataListShujus.value) //(formData.value.id, fuzerenId.value, startTimeOne.value, endTimeTwo.value, "", 0, 1, formatDate(dateThree.value, 'YYYY-MM-DD'));
prods.value.projectPlanSubs = []
for (let a = 0; a < datalistss.length; a++) {
dataListShuju.value.push(datalistss[a])
prods.value.projectPlanSubs.push(datalistss[a])
}
let lastEndTime = null
for (let a = 0; a < prods.value.projectPlanSubs.length; a++) {
const prodItem = { ...prods.value.projectPlanSubs[a] }
for (let b = 0; b < prod.value.projectPlanSubs.length; b++) {
const existingItem = { ...prod.value.projectPlanSubs[b] }
if (existingItem.blankOwner === prodItem.blankOwner) {
if (
isInRange(
prodItem.startBlankDate,
prodItem.blankDate,
existingItem.startBlankDate,
existingItem.blankDate
)
) {
const queryStartTime = lastEndTime || prodItem.blankDate
const datalists = await PlanSubApi.getOwnderPlanSub(
formatDate(queryStartTime, 'YYYY-MM-DD'),
prod.value.projectPlanSubs[b].blankNum
)
prod.value.projectPlanSubs[b].startBlankDate = datalists[0].dates
prod.value.projectPlanSubs[b].blankDate = datalists[1].dates
existingItem.startBlankDates = existingItem.startBlankDate
existingItem.blankDates = existingItem.blankDate
existingItem.startBlankDate = datalists[0].dates
existingItem.blankDate = datalists[1].dates
lastEndTime = datalists[1].dates
existingItem.changeEndTime = formData.value.changeEndTime
existingItem.projectPlanId = formData.value.id
existingItem.type = 2
currentTime.value = datalists[1].dates
dateThree.value = datalists[1].dates
dataListShuju.value.push(existingItem)
dataListShujus.value.push(existingItem)
}
}
}
}
// 显示对话框
if (dataList.value.projectOrderSubs.length > 0) {
dialogVisible.value = true
}
}
//选择毛坯 ,ownder: number,newdateOne: number,newdateTwo: number,newid:number
/* const getOwnderList = async (index: number) => {
//根据行索引获取到编辑行
const currentRow = prod.value.projectPlanSubs[index];
dateThree.value = prod.value.projectPlanSubs[index].blankDate;
//获取到负责人ID
const blankOwner = currentRow.blankOwner;
for (let i = 0; i < prod.value.projectPlanSubs.length; i++) {
const datas = {...prod.value.projectPlanSubs[i] }
if (i!== index && prod.value.projectPlanSubs[i].blankOwner === blankOwner) {
if (isInRange(currentRow.startBlankDate,currentRow.blankDate, prod.value.projectPlanSubs[i].startBlankDate,prod.value.projectPlanSubs[i].blankDate)) {
const datalists = await PlanSubApi.getOwnderPlanSub(formatDate(currentRow.blankDate,'YYYY-MM-DD'),prod.value.projectPlanSubs[i].blankNum)
prod.value.projectPlanSubs[i].startBlankDate = datalists[0].dates;
prod.value.projectPlanSubs[i].blankDate = datalists[1].dates;
datas.startBlankDate = datalists[0].dates;
datas.blankDate = datalists[1].dates;
datas.changeEndTime = formData.value.changeEndTime;
currentTime.value = datalists[1].dates;
dateThree.value = datalists[1].dates;
//赋值给集合
dataListShuju.value.push(datas);
getOwnderList(i);
}
}
}
for(let a=0;a<dataListShuju.value.length;a++){
for(let b=a+1;b<dataListShuju.value.length;b++){
if (dataListShuju.value[a] && dataListShuju.value[a].id && dataListShuju.value[b] && dataListShuju.value[b].id &&dataListShuju.value[a].id === dataListShuju.value[b].id) {
dataListShuju.value[a].startBlankDate = dataListShuju.value[b].startBlankDate;
dataListShuju.value[a].blankDate = dataListShuju.value[b].blankDate;
// 删除下标为b的数据
dataListShuju.value.splice(b, 1);
// 由于删除了一个元素,需要调整内层循环的索引
b--;
}
}
}
//完成后检查其他项目是否存在日期冲突
console.log('调用了');
const datalistss = await PlanSubApi.getOwnderPlanChaHuo(formData.value.id,fuzerenId.value,startTimeOne.value,endTimeTwo.value,"",0,1,formatDate(dateThree.value,'YYYY-MM-DD'))
for(var a=0;a<datalistss.length;a++){
dataListShuju.value.push(datalistss[a]);
}
dataList.value.projectOrderSubs = dataListShuju.value
ownerId.value = blankOwner
dateOne.value = formatDate(currentRow.startBlankDate,'YYYY-MM-DD')
dateTwo.value = formatDate(currentRow.blankDate,'YYYY-MM-DD')
id.value = currentRow.id
diffDays.value = '1'
typeNames.value = '1'
if(dataList.value.projectOrderSubs.length>0){
dialogVisible.value = true;
}
// 通知子组件数据已经更新
//emit('update');
} */
const isInRange = (start, end, target1, target2) => {
const startDate = new Date(start)
const endDate = new Date(end)
const targetDate1 = new Date(target1)
const targetDate2 = new Date(target2)
const isTarget1InRange = targetDate1 >= startDate && targetDate1 <= endDate
const isTarget2InRange = targetDate2 >= startDate && targetDate2 <= endDate
return isTarget1InRange || isTarget2InRange
}
const handleUpdate = () => {
// 处理子组件的更新通知
console.log('子组件已更新')
}
const handleCraftInfo = async (val) => {
if (val == 0) {
const a = await PlanApi.verification(query.id, 'BLUEPRINT_FOUNDRY_TECHNOLOGY')
if (a) {
formData.value.craftOwner = undefined
formData.value.craftStartDate = undefined
formData.value.craftEndDate = undefined
} else {
message.error('铸造工艺进度上报有报工数据,不允许修改为否')
formData.value.hasCraft = 1
}
} else {
const data = await PlanApi.getPlan(query.id)
formData.value.craftOwner = data.craftOwner
formData.value.craftStartDate = data.craftStartDate
formData.value.craftEndDate = data.craftEndDate
}
}
const handleCastInfo = async (val) => {
if (val == 0) {
const a = await PlanApi.verification(query.id, 'CASTING_DRAWING')
if (a) {
formData.value.castOwner = undefined
formData.value.castStartDate = undefined
formData.value.castEndDate = undefined
} else {
message.error('铸件图设计进度上报有报工数据 不允许修改为否')
formData.value.hasCast = 1
}
} else {
const data = await PlanApi.getPlan(query.id)
formData.value.castOwner = data.castOwner
formData.value.castStartDate = data.castStartDate
formData.value.castEndDate = data.castEndDate
}
}
const handleSubCode = (row, name) => {
// row.projectSubCode = name.length==0?"" : (formData.value.projectCode + '-' + customerInit.value.brief + '-' + name)
}
const handleMouldType = async (scope, mid) => {
// 获得设备信息下拉列表
//scope.row.equipList = equipInit.value.filter(rg => rg.id == mid)
}
const submitForm = async () => {
// 校验表单
await formRef.value.validate()
await subFormRef.value.validate()
let isRepeat = false
for (var i = 0; i < formData.value.projectPlanSubs.length; i++) {
var item = formData.value.projectPlanSubs[i]
item.projectPlanId = formData.value.id
//毛坯
if (item.blankDate) {
if (!item.startBlankDate) {
message.alert(item.name + '的毛坯开始时间不能为空')
return
}
if (!item.blankOwner) {
message.alert(item.name + '的毛坯责任人不能为空')
return
}
}
if (item.startBlankDate) {
if (!item.blankDate) {
message.alert(item.name + '的毛坯结束时间不能为空')
return
}
if (!item.blankOwner) {
message.alert(item.name + '的毛坯责任人不能为空')
return
}
}
if (item.blankOwner) {
if (!item.startBlankDate) {
message.alert(item.name + '的毛坯开始时间不能为空')
return
}
if (!item.blankDate) {
message.alert(item.name + '的毛坯结束时间不能为空')
return
}
}
//2D
if (item.twoDimDate) {
if (!item.startTwoDimDate) {
message.alert(item.name + '的2D开始时间不能为空')
return
}
if (!item.twoDimOwner) {
message.alert(item.name + '的2D责任人不能为空')
return
}
}
if (item.startTwoDimDate) {
if (!item.twoDimDate) {
message.alert(item.name + '的2D结束时间不能为空')
return
}
if (!item.twoDimOwner) {
message.alert(item.name + '的2D责任人不能为空')
return
}
}
if (item.twoDimOwner) {
if (!item.startTwoDimDate) {
message.alert(item.name + '的2D开始时间不能为空')
return
}
if (!item.twoDimDate) {
message.alert(item.name + '的2D结束时间不能为空')
return
}
}
//3D
if (item.threeDimDate) {
if (!item.startThreeDimDate) {
message.alert(item.name + '的3D开始时间不能为空')
return
}
if (!item.threeDimOwner) {
message.alert(item.name + '的3D责任人不能为空')
return
}
}
if (item.startThreeDimDate) {
if (!item.threeDimDate) {
message.alert(item.name + '的3D结束时间不能为空')
return
}
if (!item.threeDimOwner) {
message.alert(item.name + '的3D责任人不能为空')
return
}
}
if (item.threeDimOwner) {
if (!item.startThreeDimDate) {
message.alert(item.name + '的3D开始时间不能为空')
return
}
if (!item.threeDimDate) {
message.alert(item.name + '的3D结束时间不能为空')
return
}
}
if (
formData.value.projectPlanSubs.filter((record) => {
return record.projectSubShortName == item.projectSubShortName
}).length > 1
)
isRepeat = true
}
if (isRepeat) {
await message.alert('子项目简称不能重复!')
return
}
// 提交请求
formLoading.value = true
try {
const data = formData.value as unknown as PlanApi.PlanVO
data.craftContent = JSON.stringify(data.craftInfos)
await PlanApi.updatePlan(data)
await PlanSubApi.operate(formData.value.projectPlanSubs)
setTimeout(() => {
reload()
},1000)
console.log()
message.success(t('common.updateSuccess'))
// 发送操作成功的事件
// emit('success')
} finally {
formLoading.value = false
}
}
const handleInitPlanSub = async () => {
// 项目子项列表
formData.value.projectOrderSubs = await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(
formData.value.projectId
)
// 生产计划子项列表
const queryParams = reactive({
pageNo: 1,
pageSize: 99,
projectPlanId: query.id
})
formData.value.projectPlanSubs = (await PlanSubApi.getPlanSubPage(queryParams)).list
formData.value.projectPlanSubs.forEach((item) => {
if (formData.value.projectOrderSubs.filter((sub) => item.projectSubId == sub.id).length > 0) {
var subTemp = formData.value.projectOrderSubs.find((sub) => item.projectSubId == sub.id)
item.planSubId = item.id
item.projectPlanId = subTemp.projectPlanId
item.projectId = subTemp.projectOrderId
item.projectSubId = subTemp.id
item.name = subTemp.name
item.compositionName = subTemp.compositionName
item.unit = subTemp.unit
item.amount = subTemp.amount
if (item.equip != undefined && item.equip.length > 0) {
item.mouldId = equipInit.value.filter((rg) => rg.id == item.equipId)[0].mould_type_id
}
// item.projectSubCode = subTemp.projectSubCode
// item.mouldId = subTemp.mouldId
// item.blankDate = subTemp.blankDate
// item.blankOwner = subTemp.blankOwner
// item.twoDimDate = subTemp.twoDimDate
// item.twoDimOwner = subTemp.twoDimOwner
// item.threeDimDate = subTemp.threeDimDate
// item.threeDimOwner = subTemp.threeDimOwner
// if(item.equipId != undefined && item.equipId.length>0){
// item.equipList = equipInit.value.filter(rg => rg.id == item.equipId)
// }
item.equipList = equipInit.value.filter((rg) => rg.id == item.equipId)
}
})
}
const userInit = ref()
const userInit1 = ref()
const userInit2 = ref()
const userInit3 = ref()
// const userInit4 = ref()
const mergedArray = ref()
const mergedArray1 = ref()
const mergedArray2 = ref()
const mergedArray3 = ref()
const mergedArray4 = ref()
const mergedArray5 = ref()
const mergedArray6 = ref()
const mergedArray7 = ref()
const equipInit = ref()
const mouldTypeList = ref()
const customerInit = ref()
type OwnerListType = {
index: number
id: number
label: string
}
const personList = ref([])
const ownerList = ref<OwnerListType[]>([])
const getOwnerListThis = async (): Promise<OwnerListType[]> => {
let tempList: any[]
let ownerList: OwnerListType[] = []
tempList = personList.value
if (tempList) {
tempList.forEach((item, index) => {
let key = Object.keys(item)[0]
let value = item[key] as string
ownerList.push({ index: index + 1, id: Number(key), label: value })
})
}
return ownerList
}
onMounted(async () => {
//用户列表数据
userInit.value = await UserApi.getDeptName('设计部')
// userInit1.value = await UserApi.getDeptName("生产部")
userInit2.value = await UserApi.getDeptName('检验部')
// userInit3.value=await UserApi.getDeptName("采购部")
// userInit4.value=await UserApi.getDeptName("技术部")
// 模具类型下拉列表数据
mouldTypeList.value = await MouldTypeApi.getSimpList()
// 设备信息下拉列表数据
equipInit.value = await EquipApi.getSimpList()
// 获取库存信息
formData.value = await PlanApi.getPlan(query.id)
userInit1.value = await TaskDispatchApi.getOwnerUserList(0, 1)
// ownerList.value = await getOwnerListThis();
if (formData.value.hasCraft == null) {
formData.value.hasCraft = 1
}
if (formData.value.hasCast == null) {
formData.value.hasCast = 1
}
const data = await ProjectLeaderApi.getProjectLeaderType(4)
const data1 = await ProjectLeaderApi.getProjectLeaderType(5)
const data2 = await ProjectLeaderApi.getProjectLeaderType(6)
const data3 = await ProjectLeaderApi.getProjectLeaderType(7)
const data4 = await ProjectLeaderApi.getProjectLeaderType(8)
const data5 = await ProjectLeaderApi.getProjectLeaderType(9)
const data6 = await ProjectLeaderApi.getProjectLeaderType(10)
const data7 = await ProjectLeaderApi.getProjectLeaderType(11)
mergedArray.value = [...userInit1.value]
mergedArray1.value = [...userInit1.value]
mergedArray2.value = [...userInit1.value]
mergedArray3.value = [...userInit1.value]
mergedArray4.value = [...userInit1.value]
mergedArray5.value = [...userInit1.value]
mergedArray6.value = [...userInit2.value]
mergedArray7.value = [...userInit2.value]
if (data && data.owner) {
// 自动过滤 null/undefined
// 检查 mergedArray1 是否已存在相同 id 的数据
const isOwnerExist = mergedArray.value.some((item) => item.id === data.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray.value.push({
id: data.owner,
username: data.userName,
nickname: data.ownerName
})
}
}
if (data1 && data1.owner) {
const isOwnerExist = mergedArray1.value.some((item) => item.id === data1.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray1.value.push({
id: data1.owner,
username: data1.userName,
nickname: data1.ownerName
})
}
}
if (data2 && data2.owner) {
const isOwnerExist = mergedArray2.value.some((item) => item.id === data2.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray2.value.push({
id: data2.owner,
username: data2.userName,
nickname: data2.ownerName
})
}
}
if (data3 && data3.owner) {
const isOwnerExist = mergedArray3.value.some((item) => item.id === data3.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray3.value.push({
id: data3.owner,
username: data3.userName,
nickname: data3.ownerName
})
}
}
if (data4 && data4.owner) {
const isOwnerExist = mergedArray4.value.some((item) => item.id === data4.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray4.value.push({
id: data4.owner,
username: data4.userName,
nickname: data4.ownerName
})
}
}
if (data5 && data5.owner) {
const isOwnerExist = mergedArray5.value.some((item) => item.id === data5.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray5.value.push({
id: data5.owner,
username: data5.userName,
nickname: data5.ownerName
})
}
}
if (data6 && data6.owner) {
const isOwnerExist = mergedArray6.value.some((item) => item.id === data6.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray6.value.push({
id: data6.owner,
username: data6.userName,
nickname: data6.ownerName
})
}
}
if (data7 && data7.owner) {
// 自动过滤 null/undefined
const isOwnerExist = mergedArray7.value.some((item) => item.id === data7.owner)
// 如果不存在,才 push 新数据
if (!isOwnerExist) {
mergedArray7.value.push({
id: data7.owner,
username: data7.userName,
nickname: data7.ownerName
})
}
}
await handleInitPlanSub()
var projectInit = await ProjectOrderApi.getProjectOrder(formData.value.projectId)
customerInit.value = await CustomerApi.getCustomer(projectInit.customerId)
var businessManInit = await UserApi.getUser(projectInit.businessMan)
formData.value.projectCode = projectInit.code
formData.value.projectStatus = projectInit.orderStatus
formData.value.customerName = customerInit?.value.name
formData.value.projectName = projectInit.projectName
formData.value.businessMan = businessManInit?.nickname
formData.value.projectStartTime = projectInit.projectStartTime
formData.value.projectEndTime = projectInit.projectEndTime
formData.value.businessLine = projectInit.businessLine
formData.value.property = projectInit.property
formData.value.isUrgency = projectInit.isUrgency
if (formData.value.auditDate == null || formData.value.auditDate == '') {
formData.value.auditDate = projectInit.orderTime
}
if (formData.value.editorDate == null || formData.value.editorDate == '') {
formData.value.editorDate = projectInit.orderTime
}
if (formData.value.approveDate == null || formData.value.approveDate == '') {
formData.value.approveDate = projectInit.orderTime
}
// 操作日志
let logParams = {
pageNo: 1,
pageSize: 99,
businessId: formData.value.projectId,
businessType: 'PROJECT_ORDER'
}
formData.value.operateLogs = (await getOperateLogPage(logParams)).list
if (formData.value.craftContent == null) {
formData.value.craftInfos = []
getIntDictOptions(DICT_TYPE.HELI_CRAFT).forEach((dict) => {
formData.value.craftInfos.push({
id: dict.value,
name: dict.label,
startDate: '',
endDate: '',
owner: '',
description: ''
})
})
} else {
formData.value.craftInfos = eval(formData.value.craftContent)
}
// 计划编制人
if (formData.value.editor == null || formData.value.editor == undefined) {
var newVar = await ProjectLeaderApi.getProjectLeaderType(1)
formData.value.editor = newVar.owner
}
// 计划审核人
if (formData.value.auditor == null || formData.value.auditor == undefined) {
const newVar = await ProjectLeaderApi.getProjectLeaderType(2)
formData.value.auditor = newVar.owner
}
// 计划批准人
if (formData.value.approver == null || formData.value.approver == undefined) {
const newVar = await ProjectLeaderApi.getProjectLeaderType(3)
formData.value.approver = newVar.owner
}
//装配的负责人
const craftInfos = formData.value.craftInfos
for (var i = 0; i < craftInfos.length; i++) {
if (craftInfos[i].name == '母模/毛坯') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data && data.owner) {
craftInfos[i].owner = data.owner
}
}
}
if (craftInfos[i].name == '粗,精加工') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data1 && data1.owner) {
craftInfos[i].owner = data1.owner
}
}
}
if (craftInfos[i].name == '热处理') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data2 && data2.owner) {
craftInfos[i].owner = data2.owner
}
}
}
if (craftInfos[i].name == '电火花') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data3 && data3.owner) {
craftInfos[i].owner = data3.owner
}
}
}
if (craftInfos[i].name == '打孔/抛光') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data4 && data4.owner) {
craftInfos[i].owner = data4.owner
}
}
}
if (craftInfos[i].name == '装配') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data5 && data5.owner) {
craftInfos[i].owner = data5.owner
}
}
}
if (craftInfos[i].name == '预验收') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data6 && data6.owner) {
craftInfos[i].owner = data6.owner
}
}
}
if (craftInfos[i].name == '检验') {
if (
craftInfos[i].owner == null ||
craftInfos[i].owner == undefined ||
craftInfos[i].owner == ''
) {
if (data7 && data7.owner) {
craftInfos[i].owner = data7.owner
}
}
}
}
})
//项目负责人
const handleSelectedUser1 = (newValue: any) => {
formData.value.projectOwner = newValue?.id
}
//工艺负责人
const handleSelectedUser2 = (newValue: any) => {
formData.value.craftOwner = newValue?.id
}
const handleSelectedUser10 = (newValue: any) => {
formData.value.castOwner = newValue?.id
}
// 计划编制人
const handleSelectedUser3 = (newValue: any) => {
formData.value.editor = newValue?.id
}
// 计划审核人
const handleSelectedUser4 = (newValue: any) => {
formData.value.auditor = newValue?.id
}
// 计划批准人
const handleSelectedUser5 = (newValue: any) => {
formData.value.approver = newValue?.id
}
// 毛坯负责人
const handleSelectedUser6 = async (currentIndex) => {
var userId = formData.value.projectPlanSubs[currentIndex].blankOwner
var maxBeginDate = null
if (!formData.value.projectPlanSubs[currentIndex].startBlankDate) {
for (var i = 0; i < formData.value.projectPlanSubs.length; i++) {
var item = formData.value.projectPlanSubs[i]
console.log(item.blankOwner)
if (item.blankOwner != null && item.blankOwner == userId) {
if (item.blankDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.blankDate
} else {
if (new Date(item.blankDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.blankDate
}
}
}
}
if (item.twoDimOwner != null && item.twoDimOwner == userId) {
if (item.twoDimDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.twoDimDate
} else {
if (new Date(item.twoDimDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.twoDimDate
}
}
}
}
if (item.threeDimOwner != null && item.threeDimOwner == userId) {
if (item.threeDimDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.threeDimDate
} else {
if (new Date(item.threeDimDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.threeDimDate
}
}
}
}
}
//查数据库
var queryMaxDateParams = {
twoDimOwner: userId,
queryDate: maxBeginDate == null ? null : new Date(maxBeginDate).getTime(),
projectId: formData.value.projectId
}
var maxDateDO = await planSubDetailApi.queryMaxDetail(queryMaxDateParams)
if (maxDateDO != null) {
formData.value.projectPlanSubs[currentIndex].startBlankDate = maxDateDO.maxTime
}
}
}
// 设备型号
const handleSelectedequip = (scope, newValue: any) => {
if (newValue != null && newValue != undefined && newValue.id > 0) {
scope.row.equipId = newValue?.id
scope.row.mouldId = equipInit.value.filter((ep) => ep.id == newValue?.id)[0].mould_type_id
} else {
scope.row.equipId = null
scope.row.mouldId = null
}
}
// 2D负责人
const handleSelectedUser7 = async (currentIndex) => {
var userId = formData.value.projectPlanSubs[currentIndex].twoDimOwner
var maxBeginDate = null
if (!formData.value.projectPlanSubs[currentIndex].startTwoDimDate) {
for (var i = 0; i < formData.value.projectPlanSubs.length; i++) {
var item = formData.value.projectPlanSubs[i]
if (item.blankOwner != null && item.blankOwner == userId) {
if (item.blankDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.blankDate
} else {
if (new Date(item.blankDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.blankDate
}
}
}
}
if (item.twoDimOwner != null && item.twoDimOwner == userId) {
if (item.twoDimDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.twoDimDate
} else {
if (new Date(item.twoDimDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.twoDimDate
}
}
}
}
if (item.threeDimOwner != null && item.threeDimOwner == userId) {
if (item.threeDimDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.threeDimDate
} else {
if (new Date(item.threeDimDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.threeDimDate
}
}
}
}
}
//查数据库
var queryMaxDateParams = {
twoDimOwner: userId,
queryDate: maxBeginDate == null ? null : new Date(maxBeginDate).getTime(),
projectId: formData.value.projectId
}
var maxDateDO = await planSubDetailApi.queryMaxDetail(queryMaxDateParams)
if (maxDateDO != null) {
formData.value.projectPlanSubs[currentIndex].startTwoDimDate = maxDateDO.maxTime
}
}
}
// 3D负责人
const handleSelectedUser8 = async (currentIndex) => {
var userId = formData.value.projectPlanSubs[currentIndex].threeDimOwner
var maxBeginDate = null
if (!formData.value.projectPlanSubs[currentIndex].startThreeDimDate) {
for (var i = 0; i < formData.value.projectPlanSubs.length; i++) {
var item = formData.value.projectPlanSubs[i]
if (item.blankOwner != null && item.blankOwner == userId) {
if (item.blankDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.blankDate
} else {
if (new Date(item.blankDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.blankDate
}
}
}
}
if (item.twoDimOwner != null && item.twoDimOwner == userId) {
if (item.twoDimDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.twoDimDate
} else {
if (new Date(item.twoDimDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.twoDimDate
}
}
}
}
if (item.threeDimOwner != null && item.threeDimOwner == userId) {
if (item.threeDimDate != null) {
if (maxBeginDate == null) {
maxBeginDate = item.threeDimDate
} else {
if (new Date(item.threeDimDate).getTime() > new Date(maxBeginDate).getTime()) {
maxBeginDate = item.threeDimDate
}
}
}
}
}
//查数据库
var queryMaxDateParams = {
twoDimOwner: userId,
queryDate: maxBeginDate == null ? null : new Date(maxBeginDate).getTime(),
projectId: formData.value.projectId
}
var maxDateDO = await planSubDetailApi.queryMaxDetail(queryMaxDateParams)
if (maxDateDO != null) {
formData.value.projectPlanSubs[currentIndex].startThreeDimDate = maxDateDO.maxTime
}
}
}
// 责任人
const handleSelectedUser9 = (currentIndex, newValue: any) => {
formData.value.craftInfos[currentIndex].owner = newValue?.id
}
</script>
<style>
a {
color: #409eff;
text-decoration: none;
}
.upload-file-uploader {
margin-bottom: 10px;
display: inline-block;
margin-right: 20px;
}
.hl-card .alter-class {
position: relative;
border: solid 1px orange;
outline: solid 1px orange;
}
.el-form-item__content {
margin-left: 0px !important;
}
</style>