heli-mes/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/detail.vue

801 lines
32 KiB
Vue
Raw Normal View History

2025-01-09 18:29:48 +08:00
<template>
<el-card class="hl-card">
<template #header>
<span><span v-html="dialogTitle"></span></span>
</template>
<el-form ref="formRef" label-width="120px" :model="formData" 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="6">
<el-form-item label="计划单号" prop="planCode">
<el-input class="!w-260px" v-model="formData.planCode" :disabled="true" />
<!-- {{ formData.planCode }} -->
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目编号" prop="projectCode">
<!-- {{ formData.projectCode }} -->
<el-input class="!w-260px" v-model="formData.projectCode" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="客户名称" prop="customerName">
<!-- {{ formData.customerName }} -->
<el-input class="!w-260px" v-model="formData.customerName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目名称" prop="projectName">
<!-- {{ formData.projectName }} -->
<el-input class="!w-260px" v-model="formData.projectName" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="项目负责人" prop="projectOwnerName">
<!-- {{ formData.projectOwnerName }} -->
<el-input class="!w-260px" v-model="formData.projectOwnerName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属业务线" prop="businessLine">
<!-- {{getDictLabel(DICT_TYPE.HELI_BUSINESS_LINE, formData.businessLine)}} -->
<el-select class="!w-260px" v-model="formData.businessLine" placeholder="请选择所属业务线" :disabled="true">
<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-col :span="6">
<el-form-item label="性质" prop="property">
<!-- {{getDictLabel(DICT_TYPE.HELI_PROJECT_PROPERTY, formData.property)}} -->
<el-select class="!w-250px" disabled v-model="formData.property" placeholder="请选择性质">
<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-col :span="6">
<el-form-item label="是否紧急" prop="isUrgency">
<!-- {{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, formData.isUrgency) }} -->
<el-select class="!w-260px" :disabled="true" v-model="formData.isUrgency" placeholder="请选择是否紧急">
<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 v-if="processDesignType == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'">
<el-col :span="6">
<el-form-item label="是否要工艺" prop="hasCraft">
<!-- {{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, formData.hasCraft) }} -->
<el-select class="!w-260px" :disabled="true" v-model="formData.hasCraft" placeholder="请选择是否要工艺">
<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-col :span="6">
<el-form-item label="工艺负责人" prop="craftOwnerName">
<!-- {{formData.craftOwnerName}} -->
<el-input class="!w-260px" v-model="formData.craftOwnerName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工艺开始日期" prop="craftStartDate">
<!-- {{formatDate(formData.craftStartDate, 'YYYY-MM-DD')}} -->
<el-date-picker class="!w-260px" v-model="formData.craftStartDate" type="date" placeholder="请选择工艺开始日期" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工艺结束日期" prop="craftStartDate">
<!-- {{formatDate(formData.craftEndDate, 'YYYY-MM-DD')}} -->
<el-date-picker class="!w-260px" v-model="formData.craftEndDate" type="date" placeholder="请选择工艺结束日期" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="processDesignType == 'BLUEPRINT_3D'">
<el-col :span="6">
<el-form-item label="3D负责人" prop="threeDimOwnerName">
<!-- {{ formData.threeDimOwnerName }} -->
<el-input class="!w-260px" v-model="formData.threeDimOwnerName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="3D结束日期" prop="threeDimDate">
<!-- {{formatDate(formData.threeDimDate, 'YYYY-MM-DD')}} -->
<el-date-picker class="!w-260px" v-model="formData.threeDimDate" type="date" placeholder="请选择3D结束日期" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="子项目名称" prop="projectSubName">
<!-- {{formData.projectSubName}} -->
<el-input class="!w-260px" v-model="formData.projectSubName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="子项目编号" prop="projectSubCode">
<!-- {{formData.projectSubCode}} -->
<el-input class="!w-260px" v-model="formData.projectSubCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="processDesignType == 'BLUEPRINT_2D'">
<el-col :span="6">
<el-form-item label="2D负责人" prop="twoDimOwnerName">
<!-- {{ formData.twoDimOwnerName }} -->
<el-input class="!w-260px" v-model="formData.twoDimOwnerName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="2D结束日期" prop="twoDimDate">
<!-- {{formatDate(formData.twoDimDate, 'YYYY-MM-DD')}} -->
<el-date-picker class="!w-260px" v-model="formData.twoDimDate" type="date" placeholder="请选择2D结束日期" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="子项目名称" prop="projectSubName">
<!-- {{formData.projectSubName}} -->
<el-input class="!w-260px" v-model="formData.projectSubName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="子项目编号" prop="projectSubCode">
<!-- {{formData.projectSubCode}} -->
<el-input class="!w-260px" v-model="formData.projectSubCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="processDesignType == 'BLUEPRINT_WORKBLANK'">
<el-col :span="6">
<el-form-item label="毛坯负责人" prop="blankOwnerName">
<!-- {{ formData.blankOwnerName }} -->
<el-input class="!w-260px" v-model="formData.blankOwnerName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="毛坯结束日期" prop="blankDate">
<!-- {{formatDate(formData.blankDate, 'YYYY-MM-DD')}} -->
<el-date-picker class="!w-260px" v-model="formData.blankDate" type="date" placeholder="请选择毛坯结束日期" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="子项目名称" prop="projectSubName">
<!-- {{formData.projectSubName}} -->
<el-input class="!w-260px" v-model="formData.projectSubName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="子项目编号" prop="projectSubCode">
<!-- {{formData.projectSubCode}} -->
<el-input class="!w-260px" v-model="formData.projectSubCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="生产状态" prop="planCode">
<el-select v-model="formData.planStatus" placeholder="生产状态" clearable class="!w-260px" disabled>
2025-06-03 23:43:01 +08:00
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict.value"
2025-01-09 18:29:48 +08:00
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
2025-06-03 23:43:01 +08:00
<!-- <el-col :span="6" v-if="(formData.isDelay == null || formData.isDelay == 0) ">
<el-button style="margin-left: 10%;" type="danger" @click="openDelay">延期</el-button>
</el-col> -->
<el-col :span="6" >
<el-form-item label="设计工时" prop="delayReason">
{{ getWorkTime(1)}}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设计工期" prop="delayReason">
{{ getWorkTime(2) }}
</el-form-item>
</el-col>
<el-col :span="6" >
2025-06-04 23:18:42 +08:00
<el-button v-if="formData.isOverProcess == null || formData.isOverProcess == 0" style="margin-left: 10%;" type="warning" @click="openDelay">延期</el-button>
<el-button v-if="formData.isOverProcess == null || formData.isOverProcess == 0" style="margin-left: 10%;" type="danger" @click="overProcess">{{ overbuttonName }}</el-button>
2025-06-03 23:43:01 +08:00
</el-col>
<el-col :span="12" v-if="formData.isDelay == 1">
<el-form-item label="延期原因" prop="delayReason">
<el-input
v-model="formData.delayReason"
:rows="2"
disabled
type="textarea"
placeholder="延期原因"
/>
</el-form-item>
</el-col>
2025-01-09 18:29:48 +08:00
</el-row>
</el-card>
2025-06-03 23:43:01 +08:00
<!--延期弹框-->
<el-dialog
v-model="delayDialog"
title="延期信息填写"
:before-close="handleClose"
>
<span>
<el-input
v-model="formData.delayReason"
:rows="2"
type="textarea"
placeholder="延期原因"
/>
</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="delayDialog = false">取消</el-button>
<el-button type="primary" @click="delaySubmit">
确认
</el-button>
</span>
</template>
</el-dialog>
2025-01-09 18:29:48 +08:00
<!-- 表格类信息 -->
<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 v-if="active != 'detail'">
2025-06-04 23:18:42 +08:00
<el-button v-if="formData.isOverProcess == null || formData.isOverProcess == 0" class="hl-addbutton" type="primary" size="large" @click="onAddItem">开始</el-button>
<el-button v-if="formData.isOverProcess == null || formData.isOverProcess == 0" style="margin-left: 30px;" type="warning" size="large" @click="sendItem()">推送</el-button>
2025-06-03 23:43:01 +08:00
<!-- <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button> -->
2025-01-09 18:29:48 +08:00
</el-col>
<el-col>
<el-card class="hl-incard">
<el-form ref="processDesignProgressFormRef" :model="formData.processDesignProgressList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
<el-table :data="formData.processDesignProgressList" class="hl-table">
<el-table-column label="序号" align="center" type="index" width="80" fixed />
2025-06-03 23:43:01 +08:00
<el-table-column label="开始时间" align="center" prop="beginTime" :formatter="dateFormatter" min-width="200"/>
<el-table-column label="结束时间" align="center" prop="endTime" :formatter="dateFormatter" min-width="200">
<template #header>结束时间</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.endTime`" class="mb-0px!">
<!-- <el-input-number min="0" max="100" class="!w-240px" :disabled="detailDisabled || row.id" v-model="row.progress" placeholder="请输入进度百分比" @change="verify1($index)"/>-->
2025-06-04 23:18:42 +08:00
<el-date-picker :disabled-date="(date) => disabledDate(date, row)" @change="(e) => endTimeChange(e,row)" :disabled="row.isOver || formData.isOverProcess == 1" :formatter="dateFormatter" v-model="row.endTime" type="datetime" placeholder="选择结束日期"/>
2025-06-03 23:43:01 +08:00
</el-form-item>
</template>
</el-table-column>
<el-table-column label="已做时间(小时)" align="center" prop="workTime" width="280">
<template #header>已做时间(小时)</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.workTime`" class="mb-0px!">
2025-06-04 23:18:42 +08:00
<el-input-number :max="row.maxTime" :precision="2" class="!w-240px" :disabled="row.isOver || formData.isOverProcess == 1" v-model="row.workTime" placeholder="请输入已做时间"/>
2025-06-03 23:43:01 +08:00
</el-form-item>
</template>
</el-table-column>
<!--2025.06.01-->
<!-- <el-table-column label="上报时间" align="center" prop="createTime" :formatter="dateFormatter" min-width="200"/>
2025-01-09 18:29:48 +08:00
<el-table-column label="上报人" prop="creatorName" min-width="100"/>
<el-table-column label="进度百分比(%" align="center" prop="progress" width="280">
<template #header> <span class="hl-table_header">*</span>进度百分比% </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.progress`" :rules="subFormRules.progress" class="mb-0px!">
<el-input-number min="0" max="100" class="!w-240px" :disabled="detailDisabled || row.id" v-model="row.progress" placeholder="请输入进度百分比" @change="verify1($index)"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="图纸链接" prop="progress" min-width="280">
<template #header> <span class="hl-table_header">*</span>图纸链接 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blueprintLink`" :rules="subFormRules.blueprintLink" class="mb-0px!">
<el-input :disabled="detailDisabled || row.id" v-model="row.blueprintLink" placeholder="请输入图纸链接" />
</el-form-item>
</template>
2025-06-03 23:43:01 +08:00
</el-table-column> -->
2025-01-09 18:29:48 +08:00
<el-table-column label="备注" prop="remark" min-width="280">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
2025-06-04 23:18:42 +08:00
<el-input :disabled="row.hasNext || row.isOver || formData.isOverProcess == 1" v-model="row.remark" placeholder="请输入备注" />
2025-01-09 18:29:48 +08:00
</el-form-item>
</template>
</el-table-column>
2025-06-03 23:43:01 +08:00
<el-table-column fixed="right" label="操作" align="center" min-width="160">
<template #default="scope">
<el-button
v-if="scope.row.isOver == 0 && active != 'detail'"
link
type="danger"
@click="overRow(scope.row)"
>
结束
</el-button>
</template>
</el-table-column>
2025-01-09 18:29:48 +08:00
</el-table>
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
</el-form>
2025-06-03 23:43:01 +08:00
<!-- <div class="hl-footer text-center">
2025-01-09 18:29:48 +08:00
<el-button @click="goback" size="large"> </el-button>
<el-button v-if="active != 'detail'" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"> </el-button>
2025-06-03 23:43:01 +08:00
</div> -->
2025-01-09 18:29:48 +08:00
</el-card>
</template>
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
2025-06-03 23:43:01 +08:00
import {dateFormatter, formatDate,dateFormatter1} from "@/utils/formatTime";
2025-01-09 18:29:48 +08:00
import {ref} from "vue";
import * as ProcessDesignApi from "@/api/heli/processdesign";
import { inject } from 'vue'
import {useUserStore} from "@/store/modules/user";
import {useCommonStore} from "@/store/modules/common";
import {verify} from "node:crypto";
2025-06-04 23:18:42 +08:00
import { delay, fromPairs, now } from 'lodash-es';
2025-06-03 23:43:01 +08:00
import { FolderOpened } from '@element-plus/icons-vue/dist/types';
2025-01-09 18:29:48 +08:00
defineOptions({ name: 'ProcessDesignDetail' })
const reload = inject('reload')
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const commonStore = useCommonStore()
const userStore = useUserStore()
const router = useRouter()
const active = toRef(commonStore.getStore('active'))
const currentId = toRef(commonStore.getStore('id'))
const processDesignType = toRef(commonStore.getStore('processDesignType'))
const formLoading = ref(false)
const dialogTitle = ref('')
const detailDisabled = ref(false)
const flag = ref(false)
2025-06-03 23:43:01 +08:00
const delayDialog = ref(false)
2025-01-09 18:29:48 +08:00
const formData = ref({
id: undefined,
planId: undefined,
processDesignType: undefined,
remark: undefined,
status: 1,
projectId: undefined,
projectSubId: undefined,
processDesignProgressList: [],
})
const formRef = ref() // 表单 Ref
const processDesignProgressFormRef = ref()
2025-06-04 23:18:42 +08:00
const overbuttonName = ref('')
2025-01-09 18:29:48 +08:00
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
planId: undefined,
processDesignType: undefined,
remark: undefined,
status: 1,
projectId: undefined,
projectSubId: undefined,
processDesignProgressList: [],
}
formRef.value?.resetFields()
}
2025-06-03 23:43:01 +08:00
const disabledDate = (time: Date,row : any) => {
const today = new Date();
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1); // 设置为明天
tomorrow.setHours(23, 59, 59, 999);
const beginDate = new Date(row.beginTime);
return time.getTime() < beginDate.getTime() || time.getTime() > tomorrow.getTime();
}
const handleClose = (done: () => void) => {
ElMessageBox.confirm('是否退出?')
.then(() => {
delayDialog.value=false;
})
.catch(() => {
})
}
const getWorkTime = (type) =>{
if(formData.value.craftStartDate != null && formData.value.craftEndDate != null){
const start = new Date(formData.value.craftStartDate ).getTime();
const end = new Date( formData.value.craftEndDate).getTime();
const diffTime = Math.abs(end - start);
var day = Math.floor(diffTime / (1000 * 60 * 60 * 24));
if(type == 1){
return day * 8 + '小时';
}else{
return day +'天'
}
}else{return ''
}
}
2025-06-04 23:18:42 +08:00
const endTimeChange = (e , row) =>{
if(e == null ){
row.workTime = null
row.maxTime = row.workTime;
}else{
var endTime = new Date(e);
var timeDiff = endTime.getTime() -row.beginTime;
// 将毫秒转换为小时
row.workTime = timeDiff / (1000 * 60 * 60);
row.maxTime = row.workTime;
}
}
2025-06-03 23:43:01 +08:00
const delaySubmit = async() =>{
if(formData.value.delayReason == null || formData.value.delayReason.replaceAll(' ','') == ''){
message.error("延期原因不得为空,请确认!")
return;
}
formData.value.isDelay = 1;
formData.value.delayTime = (new Date()).getTime()
await submitForm('SAVE');
}
const openDelay = () =>{
var date = new Date();
if(processDesignType.value == 'BLUEPRINT_WORKBLANK'){
if(formData.value.blankDate != null ){
if(formData.value.blankDate > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
return
}
}else{
message.error("毛坯结束时间为空!请确认!")
return
}
}
if(processDesignType.value == 'BLUEPRINT_2D'){
if(formData.value.twoDimDate != null ){
if(formData.value.twoDimDate > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
return
}
}else{
message.error("2D结束时间为空!请确认!")
return
}
}
if(processDesignType.value == 'BLUEPRINT_3D'){
if(formData.value.threeDimDate != null ){
if(formData.value.threeDimDate > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
return
}
}else{
message.error("3D结束时间为空!请确认!")
return
}
}
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
console.log(formData.value.craftEndDate)
if(formData.value.craftEndDate != null ){
console.log(date.getTime())
console.log(formData.value.craftEndDate)
if(formData.value.craftEndDate > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
return
}
}else{
message.error("工艺结束时间为空!请确认!")
return
}
}
delayDialog.value = true;
}
const overRow = async( row :any) =>{
2025-06-04 23:18:42 +08:00
if(row.endTime == null ){
2025-06-03 23:43:01 +08:00
row.endTime = new Date().getTime()
var timeDiff = row.endTime -row.beginTime;
// 将毫秒转换为小时
row.workTime = timeDiff / (1000 * 60 * 60);
row.maxTime = row.workTime;
// row.workTime = row.endTime - row.
}
2025-06-04 23:18:42 +08:00
if(row.endTime == null ){
2025-06-03 23:43:01 +08:00
message.error("结束时间不能为空!请确认!")
return
}
2025-06-04 23:18:42 +08:00
if(row.workTime == null
2025-06-03 23:43:01 +08:00
){
message.error("已做时间不能为空!请确认")
return
}
row.isOver = 1;
2025-06-03 23:57:34 +08:00
await submitForm('SAVE');
2025-06-03 23:43:01 +08:00
//更新一下这条数据的状态
}
2025-06-04 23:18:42 +08:00
const overProcess = () =>{
if(formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){
for (let index = 0; index < formData.value.processDesignProgressList.length; index++) {
var item = formData.value.processDesignProgressList[index];
if(!item.hasNext){
if(item.endTime == null ){
message.error("结束时间不能为空!请确认!")
return
}
if(item.workTime == null){
message.error("已做时间不能为空!请确认")
return
}
}
item.isOver = 1;
}
}else{
message.error("至少进行一次进度汇报!")
return
}
ElMessageBox.confirm('是否结束该项目?')
.then( async () => {
await submitForm('SAVE');
await ProcessDesignApi.over(formData.value.id)
await queryData(formData.value.id)
message.success("修改成功!")
})
.catch(() => {
})
}
2025-06-03 23:43:01 +08:00
const sendItem = async() =>{
//推送最新的一条,如果备注为空提示备注为空不能推送
if(formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){
var senIndex = 0;//推送的消息第几天,规则:
/**
* 推送最新一条数据内容为客户简称+项目名称+子项目名+备注内容
推送条件
报工后点击保存然后推送菜单有效
1要求先保证推送需要判断备注不能为空报警提示
*/
for (let index = 0; index < formData.value.processDesignProgressList.length; index++) {
var item = formData.value.processDesignProgressList[index];
if(!item.hasNext){
senIndex = index;
2025-06-04 23:18:42 +08:00
if(item.endTime == null){
2025-06-03 23:43:01 +08:00
message.error("结束时间不能为空!请确认!")
return
}
2025-06-04 23:18:42 +08:00
if(item.workTime == null){
2025-06-03 23:43:01 +08:00
message.error("已做时间不能为空!请确认")
return
}
if(item.remark == null || item.remark == ''){
message.error("推送备注不能为空!请确认")
return
}
2025-06-04 23:18:42 +08:00
}
item.isOver = 1
2025-06-03 23:43:01 +08:00
}
//先保存
await submitForm('SAVE');
//调用推送方法
}else{
message.error("至少添加一条数据后才能推送!请确认!")
}
}
2025-01-09 18:29:48 +08:00
const subFormLoading = ref(false) // 子表单的加载中
const subFormRules = reactive({
2025-06-03 23:43:01 +08:00
// progress: [{ required: true, message: '进度百分比(%)不能为空', trigger: 'blur' }],
// blueprintLink: [{ required: true, message: '图纸链接不能为空', trigger: 'blur' }],
2025-01-09 18:29:48 +08:00
})
const queryData = async (id?: number) => {
resetForm()
// 修改时,设置数据
if (id) {
formLoading.value = true
try {
formData.value = await ProcessDesignApi.getProcessDesign(id)
formData.value.processDesignProgressList = await ProcessDesignApi.getProcessDesignProgressListByProcessDesignId(id)
2025-06-03 23:43:01 +08:00
if( formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){
var maxTime = null;
if(formData.value.processDesignProgressList.length == 1){
formData.value.processDesignProgressList[0].hasNext = false;
if(formData.value.processDesignProgressList[0].endTime != null && formData.value.processDesignProgressList[0].endTime != ''){
formData.value.processDesignProgressList[0].maxTime = (formData.value.processDesignProgressList[0].endTime - formData.value.processDesignProgressList[0].beginTime)/ (1000 * 60 * 60);
}
} else{
var maxIndex = 0;
for (let index = 0; index < formData.value.processDesignProgressList.length; index++) {
var item = formData.value.processDesignProgressList[index];
if(item.endTime != null && item.endTime != ''){
item.maxTime = (item.endTime - item.beginTime)/ (1000 * 60 * 60);
}
if(maxTime == null){
maxIndex = index;
maxTime = item.createTime;
item.hasNext = false;
}else{
if(item.createTime > maxTime){
formData.value.processDesignProgressList[maxIndex].hasNext = true;
maxIndex = index;
item.hasNext = false;
}else{
item.hasNext = true;
}
}
}
}
}
2025-01-09 18:29:48 +08:00
} finally {
formLoading.value = false
}
}
}
const submitForm = async (operate) => {
2025-06-03 23:43:01 +08:00
// if (formData.value.processDesignProgressList.length>1){
// var Current = formData.value.processDesignProgressList[0].progress;
// var previous = formData.value.processDesignProgressList[1].progress;
// if (Current<previous){
// message.error("本次上报进度"+Current+"%小于上次上报进度"+previous+"%,请确认")
// return
// }
// }
2025-01-09 18:29:48 +08:00
// 校验表单
await formRef.value.validate()
// 校验子表单
await processDesignProgressFormRef.value.validate()
// 提交请求
formLoading.value = true
try {
const data = formData.value as unknown as ProcessDesignApi.ProcessDesignVO
let processDesignId;
if (!formData.value.id) {
processDesignId = await ProcessDesignApi.createProcessDesign(data)
} else {
processDesignId = await ProcessDesignApi.updateProcessDesign(data)
}
message.success(t('common.operationSuccess'))
commonStore.setStore('active', 'update');
commonStore.setStore('id', processDesignId);
reload()
} finally {
formLoading.value = false
}
}
/** 新增按钮操作 */
2025-06-03 23:43:01 +08:00
const onAddItem = async() => {
2025-06-04 23:18:42 +08:00
//条件修改:没有时间就不填
2025-06-03 23:43:01 +08:00
var date = new Date();
if(processDesignType.value == 'BLUEPRINT_WORKBLANK'){
if(formData.value.blankDate != null ){
if(formData.value.blankDate < date.getTime()){
if(formData.value.isDelay == null || formData.value.isDelay == 0){
message.error("当前任务已超期,请延期后重试!")
return
}
}
}else{
2025-06-04 23:18:42 +08:00
// message.error("毛坯结束时间为空!请确认!")
// return
2025-06-03 23:43:01 +08:00
}
}
if(processDesignType.value == 'BLUEPRINT_2D'){
if(formData.value.twoDimDate != null ){
if(formData.value.twoDimDate < date.getTime()){
if(formData.value.isDelay == null || formData.value.isDelay == 0){
message.error("当前任务已超期,请延期后重试!")
return
}
}
}else{
2025-06-04 23:18:42 +08:00
// message.error("2D结束时间为空!请确认!")
// return
2025-06-03 23:43:01 +08:00
}
}
if(processDesignType.value == 'BLUEPRINT_3D'){
if(formData.value.threeDimDate != null ){
if(formData.value.threeDimDate < date.getTime()){
if(formData.value.isDelay == null || formData.value.isDelay == 0){
message.error("当前任务已超期,请延期后重试!")
return
}
}
}else{
2025-06-04 23:18:42 +08:00
// message.error("3D结束时间为空!请确认!")
// return
2025-06-03 23:43:01 +08:00
}
}
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
console.log(formData.value.craftEndDate)
if(formData.value.craftEndDate != null ){
console.log(date.getTime())
console.log(formData.value.craftEndDate)
if(formData.value.craftEndDate < date.getTime()){
if(formData.value.isDelay == null || formData.value.isDelay == 0){
message.error("当前任务已超期,请延期后重试!")
return
}
}
}else{
2025-06-04 23:18:42 +08:00
// message.error("工艺结束时间为空!请确认!")
// return
2025-06-03 23:43:01 +08:00
}
}
2025-06-04 23:18:42 +08:00
if (formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length>0){
2025-06-03 23:43:01 +08:00
for ( var i = 0 ; i < formData.value.processDesignProgressList.length ; i++){
var item = formData.value.processDesignProgressList[i];
2025-06-04 23:18:42 +08:00
if(item.isOver == 0){
message.error("上一项进度未结束汇报!请确认!")
return;
}
// if(item.endTime == null ){
// message.error("结束时间不能为空!请确认!")
// return
// }
// if(item.workTime == null
// ){
// message.error("已做时间不能为空!请确认")
// return
// }
2025-01-09 18:29:48 +08:00
}
}
2025-06-03 23:43:01 +08:00
2025-01-09 18:29:48 +08:00
const row = {
id: undefined,
processDesignId: undefined,
progress: undefined,
blueprintLink: undefined,
2025-06-03 23:43:01 +08:00
remark: '',
createTime: date.getTime(),
beginTime:date.getTime(),
2025-06-04 23:18:42 +08:00
endTime:undefined,
2025-06-03 23:43:01 +08:00
isOver:0,
workTime:undefined,
2025-01-09 18:29:48 +08:00
creatorName: userStore.getUser.nickname,
status: 1,
}
row.processDesignId = formData.value.id
formData.value.processDesignProgressList.unshift(row)
2025-06-03 23:43:01 +08:00
await submitForm('SAVE');
2025-01-09 18:29:48 +08:00
}
const goback = () => {
router.back()
}
onMounted(() => {
dialogTitle.value = t('action.' + active.value)
if ('detail' == active.value) {
detailDisabled.value = true
}
queryData(currentId.value)
2025-06-04 23:18:42 +08:00
if(processDesignType.value == 'BLUEPRINT_WORKBLANK'){
overbuttonName.value = '毛坯项目完结'
}
if(processDesignType.value == 'BLUEPRINT_2D'){
overbuttonName.value = '2D项目完结'
}
if(processDesignType.value == 'BLUEPRINT_3D'){
overbuttonName.value = '3D项目完结'
}
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
overbuttonName.value='铸造项目完结'
}
2025-01-09 18:29:48 +08:00
})
</script>
<style scoped lang="less"></style>