问题修改

This commit is contained in:
z 2025-07-03 18:39:15 +08:00
parent 0d9eba2cee
commit cb48e3d994
20 changed files with 345 additions and 46 deletions

View File

@ -1,5 +1,8 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo; package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo;
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplandetail.vo.MaterialPlanDetailRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
@ -84,5 +87,7 @@ public class MaterialPlanRespVO {
@Schema(description = "制单日期", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "制单日期", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("制单日期") @ExcelProperty("制单日期")
private LocalDateTime matPlanDate; private LocalDateTime matPlanDate;
@Schema(description = "需求计划明细")
private List<MaterialPlanBoomDO> detailList;
} }

View File

@ -102,7 +102,7 @@ public class ProcessDesignRespVO {
@Schema(description = "延期原因", example = "28809") @Schema(description = "延期原因", example = "28809")
private String delayReason; private String delayReason;
@Schema(description = "毛坯最新进度") @Schema(description = "毛坯最新进度")
private BigDecimal progressBlank; private String progressBlank;
@Schema(description = "2D结束日期") @Schema(description = "2D结束日期")
private LocalDateTime twoDimDate; private LocalDateTime twoDimDate;
@ -112,7 +112,7 @@ public class ProcessDesignRespVO {
private String twoDimOwnerName; private String twoDimOwnerName;
@Schema(description = "2D最新进度") @Schema(description = "2D最新进度")
private BigDecimal progress2d; private String progress2d;
@Schema(description = "3D结束日期") @Schema(description = "3D结束日期")
private LocalDateTime threeDimDate; private LocalDateTime threeDimDate;
@ -122,7 +122,7 @@ public class ProcessDesignRespVO {
private String threeDimOwnerName; private String threeDimOwnerName;
@Schema(description = "3D最新进度") @Schema(description = "3D最新进度")
private BigDecimal progress3d; private String progress3d;
@Schema(description = "子项目名称") @Schema(description = "子项目名称")
private String projectSubName; private String projectSubName;

View File

@ -109,5 +109,7 @@ public class TaskDispatchDetailTotalVO {
@Schema(description = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE") @Schema(description = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE")
private String dispatchTypes; private String dispatchTypes;
@Schema(description = "报工状态")
private Integer reportStatus;
} }

View File

@ -62,5 +62,7 @@ public class TaskDispatchSaveReqVO {
@Schema(description = "操作意见") @Schema(description = "操作意见")
private String activeOpinion; private String activeOpinion;
@Schema(description = "报工状态")
private Integer reportStatus;
} }

View File

@ -1,5 +1,7 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan; package com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -111,4 +113,6 @@ public class MaterialPlanDO extends BaseDO {
* 制单日期 * 制单日期
*/ */
private Date matPlanDate; private Date matPlanDate;
@TableField(exist = false)
private List<MaterialPlanBoomDO> detailList;
} }

View File

@ -60,6 +60,7 @@ public class ProcessDesignDO extends BaseDO {
private Date delayTime; private Date delayTime;
private String delayReason; private String delayReason;
@TableField("is_over_process")
private Integer isOverProcess; private Integer isOverProcess;
/** /**
* 子项目id * 子项目id
@ -113,7 +114,7 @@ public class ProcessDesignDO extends BaseDO {
private String blankOwnerName; private String blankOwnerName;
@TableField(exist = false) @TableField(exist = false)
private BigDecimal progressBlank; private String progressBlank;
@TableField(exist = false) @TableField(exist = false)
private LocalDateTime twoDimDate; private LocalDateTime twoDimDate;
@ -123,7 +124,7 @@ public class ProcessDesignDO extends BaseDO {
private String twoDimOwnerName; private String twoDimOwnerName;
@TableField(exist = false) @TableField(exist = false)
private BigDecimal progress2d; private String progress2d;
@TableField(exist = false) @TableField(exist = false)
private LocalDateTime threeDimDate; private LocalDateTime threeDimDate;
@ -133,7 +134,7 @@ public class ProcessDesignDO extends BaseDO {
private String threeDimOwnerName; private String threeDimOwnerName;
@TableField(exist = false) @TableField(exist = false)
private BigDecimal progress3d; private String progress3d;
@TableField(exist = false) @TableField(exist = false)
private boolean isOver; private boolean isOver;
@TableField(exist = false) @TableField(exist = false)

View File

@ -227,4 +227,5 @@ public class TaskDispatchDetailDO extends BaseDO {
private BigDecimal matWeight; private BigDecimal matWeight;
@TableField(exist = false) @TableField(exist = false)
private String nickname; private String nickname;
private Integer reportStatus;
} }

View File

@ -36,7 +36,7 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.select("b.blank_date as blankDate","b.start_blank_date as startBlankDate", "b.two_dim_date as twoDimDate","b.start_two_dim_date as startTwoDimDate", "b.three_dim_date as threeDimDate", "b.start_three_dim_date as startThreeDimDate") .select("b.blank_date as blankDate","b.start_blank_date as startBlankDate", "b.two_dim_date as twoDimDate","b.start_two_dim_date as startTwoDimDate", "b.three_dim_date as threeDimDate", "b.start_three_dim_date as startThreeDimDate")
.select("u3.nickname as blankOwnerName", "u4.nickname as twoDimOwnerName", "u5.nickname as threeDimOwnerName") .select("u3.nickname as blankOwnerName", "u4.nickname as twoDimOwnerName", "u5.nickname as threeDimOwnerName")
.select("c.name as projectSubName", "b.project_sub_code as projectSubCode") .select("c.name as projectSubName", "b.project_sub_code as projectSubCode")
.select("z.progress,z.blueprint_link as blueprintLink ") .select("z.progress,z.blueprint_link as blueprintLink")
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessDesignDO::getPlanId) .leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessDesignDO::getPlanId)
.leftJoin("project_plan_sub b on b.project_plan_id = t.plan_id and b.project_sub_id = t.project_sub_id") .leftJoin("project_plan_sub b on b.project_plan_id = t.plan_id and b.project_sub_id = t.project_sub_id")
.leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, ProcessDesignDO::getProjectSubId) .leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, ProcessDesignDO::getProjectSubId)

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.service.bgmasterline; package com.chanko.yunxi.mes.module.heli.service.bgmasterline;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterDO;
@ -86,6 +87,19 @@ public class BgMasterLineServiceImpl implements BgMasterLineService {
wrapper.eq(TaskDispatchDetailDO::getId,pgMasterLineDO.getDispatchDetailId()); wrapper.eq(TaskDispatchDetailDO::getId,pgMasterLineDO.getDispatchDetailId());
wrapper.set(TaskDispatchDetailDO::getTestYn,"Y"); wrapper.set(TaskDispatchDetailDO::getTestYn,"Y");
taskDispatchDetailMapper.update(wrapper); taskDispatchDetailMapper.update(wrapper);
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(pgMasterLineDO.getDispatchDetailId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDetailDO.getDispatchId());
wrapper1.eq(TaskDispatchDetailDO::getSort, taskDispatchDetailDO.getSort()+1);
wrapper1.eq(TaskDispatchDetailDO::getDeleted, 0);
TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper1);
if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){
taskDispatchDetailDO.setReportStatus(1);
taskDispatchDetailMapper.updateById(taskDispatchDetailDO);
}
}
}else{ }else{
//不相等时只更新当前报工状态 //不相等时只更新当前报工状态
pgMasterLineDO.setActive("END"); pgMasterLineDO.setActive("END");

View File

@ -337,7 +337,18 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
@Override @Override
public PageResult<MaterialPlanDO> getBeiKuPage(MaterialPlanPageReqVO pageReqVO) { public PageResult<MaterialPlanDO> getBeiKuPage(MaterialPlanPageReqVO pageReqVO) {
return materialPlanMapper.getBeiKuPage(pageReqVO); PageResult<MaterialPlanDO> beiKuPage = materialPlanMapper.getBeiKuPage(pageReqVO);
List<MaterialPlanDO> list = beiKuPage.getList();
list.forEach(item ->
{
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MaterialPlanBoomDO::getProjectMaterialPlanId, item.getId());
queryWrapper.eq(MaterialPlanBoomDO::getDeleted,0);
item.setDetailList(materialPlanBoomMapper.selectList(queryWrapper));
}
);
beiKuPage.setList( list);
return beiKuPage;
} }
@Override @Override

View File

@ -1,5 +1,7 @@
package com.chanko.yunxi.mes.module.heli.service.pgmaster; package com.chanko.yunxi.mes.module.heli.service.pgmaster;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchDetailPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchDetailPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bgmasterline.BgMasterLineDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.bgmasterline.BgMasterLineDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
@ -10,6 +12,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.zjpgmaster.ZjPgMasterLine
import com.chanko.yunxi.mes.module.heli.dal.mysql.bgmasterline.BgMasterLineMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.bgmasterline.BgMasterLineMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.pgmaster.PgMasterLineMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.pgmaster.PgMasterLineMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.enums.TaskDispatchTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.TaskDispatchTypeEnum;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService; import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -54,6 +57,8 @@ public class PgMasterServiceImpl implements PgMasterService {
@Resource @Resource
private SerialNumberService serialNumberService; private SerialNumberService serialNumberService;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@ -173,6 +178,18 @@ public class PgMasterServiceImpl implements PgMasterService {
PgMasterLineDO pgMasterLineDO = pgMasterLineMapper.selectById(id); PgMasterLineDO pgMasterLineDO = pgMasterLineMapper.selectById(id);
pgMasterLineDO.setDispatchStatus(3); pgMasterLineDO.setDispatchStatus(3);
int a = pgMasterLineMapper.updateById(pgMasterLineDO); int a = pgMasterLineMapper.updateById(pgMasterLineDO);
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(pgMasterLineDO.getDispatchDetailId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDetailDO.getDispatchId());
wrapper1.eq(TaskDispatchDetailDO::getSort, taskDispatchDetailDO.getSort()+1);
wrapper1.eq(TaskDispatchDetailDO::getDeleted, 0);
TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper1);
if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){
taskDispatchDetailDO.setReportStatus(1);
taskDispatchDetailMapper.updateById(taskDispatchDetailDO);
}
}
// 返回 // 返回
return a; return a;
} }

View File

@ -271,18 +271,52 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if(ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name().equals(processDesign.getProcessDesignType())){ if(ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name().equals(processDesign.getProcessDesignType())){
processDesignDO.setBlankDate(processDesign.getBlankDate()) processDesignDO.setBlankDate(processDesign.getBlankDate())
.setStartBlankDate(processDesign.getStartBlankDate()) .setStartBlankDate(processDesign.getStartBlankDate())
.setBlankOwnerName(processDesign.getBlankOwnerName()) .setBlankOwnerName(processDesign.getBlankOwnerName());
.setProgressBlank(processDesign.getProgress()); LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
wrapper.eq(ProcessDesignProgressDO::getDeleted,0);
if (processDesignProgressMapper.selectCount(wrapper)==0){
processDesignDO.setProgressBlank("未开始");
}else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){
processDesignDO.setProgressBlank("进行中");
}else {
processDesignDO.setProgressBlank("已完成");
}
}
}else if(ProcessDesignTypeEnum.BLUEPRINT_3D.name().equals(processDesign.getProcessDesignType())){ }else if(ProcessDesignTypeEnum.BLUEPRINT_3D.name().equals(processDesign.getProcessDesignType())){
processDesignDO.setThreeDimDate(processDesign.getThreeDimDate()) processDesignDO.setThreeDimDate(processDesign.getThreeDimDate())
.setStartThreeDimDate(processDesign.getStartThreeDimDate()) .setStartThreeDimDate(processDesign.getStartThreeDimDate())
.setThreeDimOwnerName(processDesign.getThreeDimOwnerName()) .setThreeDimOwnerName(processDesign.getThreeDimOwnerName());
.setProgress3d(processDesign.getProgress()); LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
wrapper.eq(ProcessDesignProgressDO::getDeleted,0);
Long l = processDesignProgressMapper.selectCount(wrapper);
if (l==0){
processDesignDO.setProgress3d("未开始");
}else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){
processDesignDO.setProgress3d("进行中");
}else{
processDesignDO.setProgress3d("已完成");
}
}
}else if(ProcessDesignTypeEnum.BLUEPRINT_2D.name().equals(processDesign.getProcessDesignType())){ }else if(ProcessDesignTypeEnum.BLUEPRINT_2D.name().equals(processDesign.getProcessDesignType())){
processDesignDO.setTwoDimDate(processDesign.getTwoDimDate()) processDesignDO.setTwoDimDate(processDesign.getTwoDimDate())
.setStartTwoDimDate(processDesign.getStartTwoDimDate()) .setStartTwoDimDate(processDesign.getStartTwoDimDate())
.setTwoDimOwnerName(processDesign.getTwoDimOwnerName()) .setTwoDimOwnerName(processDesign.getTwoDimOwnerName());
.setProgress2d(processDesign.getProgress()); LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
wrapper.eq(ProcessDesignProgressDO::getDeleted,0);
if (processDesignProgressMapper.selectCount(wrapper)==0){
processDesignDO.setProgress2d("未开始");
}else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){
processDesignDO.setProgress2d("进行中");
}else{
processDesignDO.setProgress2d("已完成");
}
}
} }
}); });
} }

View File

@ -217,7 +217,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
taskDispatchDetailDO.setBeforeAmount(taskDispatchDetailDO.getAmount()); taskDispatchDetailDO.setBeforeAmount(taskDispatchDetailDO.getAmount());
taskDispatchDetailDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.SUBMITTED.getCode()); taskDispatchDetailDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.SUBMITTED.getCode());
} }
if (taskDispatchDetailDO.getSort()==1){
taskDispatchDetailDO.setReportStatus(1);
}
}); });
} }
@ -785,6 +789,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
ownerDO.setId(taskDispatchDetailOwnerDO.getId()); ownerDO.setId(taskDispatchDetailOwnerDO.getId());
ownerDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode()); ownerDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
taskDispatchDetailMapper.updateByOwner(ownerDO,null); taskDispatchDetailMapper.updateByOwner(ownerDO,null);
} }
} }
//子项目装配是否完成 //子项目装配是否完成
@ -891,6 +896,18 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
// planMapper.updateById(planDO); // planMapper.updateById(planDO);
// } // }
// } // }
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getTestYn())){
if ("1".equals(taskDispatchDetailDO.getTestYn())&&"PRODUCTION".equals(taskDispatchDO.getDispatchType())){
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDetailDO.getDispatchId());
wrapper.eq(TaskDispatchDetailDO::getSort, taskDispatchDetailDO.getSort()+1);
wrapper.eq(TaskDispatchDetailDO::getDeleted, 0);
TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){
taskDispatchDetailDO.setReportStatus(1);
}
}
}
taskDispatchDetailMapper.updateById(taskDispatchDetailDO); taskDispatchDetailMapper.updateById(taskDispatchDetailDO);
break; break;
} }

View File

@ -97,9 +97,9 @@
<el-button link type="primary" @click="operation('queren', scope.row.id)" v-if="scope.row.isPurYard==1"> <el-button link type="primary" @click="operation('queren', scope.row.id)" v-if="scope.row.isPurYard==1">
确认 确认
</el-button> </el-button>
<el-button link type="primary" @click="operation('bucong', scope.row.id)" v-if="scope.row.isPurYard==1"> <!-- <el-button link type="primary" @click="operation('bucong', scope.row.id)" v-if="scope.row.isPurYard==1">-->
库存补充 <!-- 库存补充-->
</el-button> <!-- </el-button>-->
<el-button link type="primary" @click="operation('caigou', scope.row.id)" v-if="scope.row.isPurYard==1"> <el-button link type="primary" @click="operation('caigou', scope.row.id)" v-if="scope.row.isPurYard==1">
采购 采购
</el-button> </el-button>

View File

@ -87,11 +87,11 @@
<el-table-column fixed label="项目名称" align="center" prop="projectName" min-width="180" /> <el-table-column fixed label="项目名称" align="center" prop="projectName" min-width="180" />
<el-table-column fixed label="子项目名称" align="center" prop="projectSubName" min-width="180" /> <el-table-column fixed label="子项目名称" align="center" prop="projectSubName" min-width="180" />
<el-table-column label="毛坯负责人" align="center" prop="blankOwnerName" width="120"/> <el-table-column label="毛坯负责人" align="center" prop="blankOwnerName" width="120"/>
<el-table-column label="毛坯最新进度" align="center" prop="progressBlank" min-width="140" > <el-table-column label="毛坯最新进度" align="center" prop="progressBlank" min-width="140" />
<template #default="scope"> <!-- <template #default="scope">-->
{{!scope.row.progressBlank ? '' : (parseFloat(scope.row.progressBlank) + '%')}} <!-- {{!scope.row.progressBlank ? '' : (parseFloat(scope.row.progressBlank) + '%')}}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="毛坯计划截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="180"/> <el-table-column label="毛坯计划截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="180"/>
<el-table-column label="毛坯是否延期" align="center" prop="blankDeferred" min-width="140"> <el-table-column label="毛坯是否延期" align="center" prop="blankDeferred" min-width="140">
<template #default="scope"> <template #default="scope">
@ -100,11 +100,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="3D负责人" align="center" prop="threeDimOwnerName" min-width="120"/> <el-table-column label="3D负责人" align="center" prop="threeDimOwnerName" min-width="120"/>
<el-table-column label="3D最新进度" align="center" prop="progress3d" min-width="140" > <el-table-column label="3D最新进度" align="center" prop="progress3d" min-width="140" />
<template #default="scope"> <!-- <template #default="scope">-->
{{!scope.row.progress3d ? '' : (parseFloat(scope.row.progress3d) + '%')}} <!-- {{!scope.row.progress3d ? '' : (parseFloat(scope.row.progress3d) + '%')}}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="3D计划截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" width="180"/> <el-table-column label="3D计划截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" width="180"/>
<el-table-column label="3D是否延期" align="center" prop="3dDeferred" min-width="140"> <el-table-column label="3D是否延期" align="center" prop="3dDeferred" min-width="140">
<template #default="scope"> <template #default="scope">
@ -113,11 +113,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="2D负责人" align="center" prop="twoDimOwnerName" min-width="120"/> <el-table-column label="2D负责人" align="center" prop="twoDimOwnerName" min-width="120"/>
<el-table-column label="2D最新进度" align="center" prop="progress2d" min-width="140" > <el-table-column label="2D最新进度" align="center" prop="progress2d" min-width="140"/> >
<template #default="scope"> <!-- <template #default="scope">-->
{{!scope.row.progress2d ? '' : (parseFloat(scope.row.progress2d) + '%')}} <!-- {{!scope.row.progress2d ? '' : (parseFloat(scope.row.progress2d) + '%')}}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="2D计划截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="180"/> <el-table-column label="2D计划截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="180"/>
<el-table-column label="2D是否延期" align="center" prop="2dDeferred" min-width="140"> <el-table-column label="2D是否延期" align="center" prop="2dDeferred" min-width="140">
<template #default="scope"> <template #default="scope">

View File

@ -122,7 +122,7 @@ label="单据日期" align="center" prop="createTime" :formatter="dateFormatter"
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_ORDER_STATUS" :value="scope.row.status" /> <dict-tag :type="DICT_TYPE.HELI_PURCHASE_ORDER_STATUS" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="right" fixed="right" min-width="220"> <el-table-column label="操作" align="right" fixed="right" min-width="250">
<template #header> <template #header>
<span style="margin-right: 30%">操作</span> <span style="margin-right: 30%">操作</span>
</template> </template>

View File

@ -29,8 +29,9 @@
<el-card class="hl-card"> <el-card class="hl-card">
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<el-table ref="multipleTable" v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" <el-table ref="multipleTable" v-loading="loading" :data="list" :stripe="true"
class="hl-table" @selection-change="handleSelectionChange" @row-click="clickRow" selection :row-key="getRowKeys"> class="hl-table" @selection-change="handleSelectionChange" @row-click="clickRow" selection :row-key="getRowKeys" @cell-mouse-enter="handleMouseEnter"
@cell-mouse-leave="handleMouseLeave">
<el-table-column type="selection" width="40" /> <el-table-column type="selection" width="40" />
<el-table-column label="物料需求计划单号" align="center" prop="projectMaterialPlanNo" width="200" /> <el-table-column label="物料需求计划单号" align="center" prop="projectMaterialPlanNo" width="200" />
<el-table-column label="单据日期" align="center" prop="matPlanDate" :formatter="dateFormatter" min-width="120px"> <el-table-column label="单据日期" align="center" prop="matPlanDate" :formatter="dateFormatter" min-width="120px">
@ -51,6 +52,31 @@
<!-- <el-table-column label="备注" align="center" prop="description" />--> <!-- <el-table-column label="备注" align="center" prop="description" />-->
</el-table> </el-table>
<!-- 物料明细提示框 -->
<el-tooltip
ref="materialTooltip"
:disabled="!activeRow || !activeRow.materialItems || activeRow.materialItems.length === 0"
:content="materialTooltipContent"
placement="top-start"
effect="light"
popper-class="material-detail-tooltip"
:virtual-ref="tooltipRef"
virtual-triggering
:offset="10"
:visible="tooltipVisible"
>
<template #content>
<div v-if="activeRow && activeRow.materialItems">
<div v-for="(item, index) in activeRow.materialItems" :key="index" class="material-item">
<span class="material-name">{{ item.matName }}</span>
<span class="material-quantity">{{ item.boomAmount }}</span>
</div>
</div>
</template>
</el-tooltip>
<!-- 分页 --> <!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" <Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" /> @pagination="getList" />
@ -77,7 +103,19 @@ const { t } = useI18n() // 国际化
const router = useRouter() const router = useRouter()
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const activeRow = ref(null) //
const tooltipRef = ref({
getBoundingClientRect: () => ({
width: 0,
height: 0,
top: 0,
bottom: 0,
left: 0,
right: 0
}),
contextElement: null
})
const tooltipVisible = ref(false)
const loading = ref(true) // const loading = ref(true) //
const list = ref([]) // const list = ref([]) //
const total = ref(0) // const total = ref(0) //
@ -91,18 +129,62 @@ const queryParams = reactive({
}) })
const queryFormRef = ref() // const queryFormRef = ref() //
const materialTooltipRef = ref(null) // 对应模板中的 <MaterialTooltip ref="materialTooltip" />
/** 查询列表 */ /** 查询列表 */
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await materialPlanApi.getBeiKuPage(queryParams) const data = await materialPlanApi.getBeiKuPage(queryParams)
list.value = data.list // list.value = data.list
console.log(data.list)
list.value = data.list.map(item => ({
...item,
//
materialItems: item.detailList || []
}));
total.value = data.total total.value = data.total
} finally { } finally {
loading.value = false loading.value = false
} }
} }
const materialTooltipContent = computed(() => {
const { materialItems } = activeRow.value || {}
if (!materialItems) return ''
return materialItems.map(item => `${item.matName} x ${item.boomAmount}`).join('\n')
})
//
const handleMouseEnter=(row, column, cell, event)=> {
activeRow.value = row
//
const rect = cell.getBoundingClientRect()
tooltipVisible.value = true
//
tooltipRef.value = {
getBoundingClientRect: () => ({
width: 0,
height: 0,
top: rect.top,
bottom: rect.bottom,
left: rect.left,
right: rect.right
}),
contextElement: cell
}
//
nextTick(() => {
if (materialTooltipRef.value) {
materialTooltipRef.value.updatePopper()
}
})
}
//
const handleMouseLeave=()=> {
tooltipVisible.value = false
activeRow.value = null;
}
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
@ -160,3 +242,83 @@ const open = async () => {
} }
defineExpose({ open }) // open defineExpose({ open }) // open
</script> </script>
<style scoped>
/* 隐藏的触发元素 */
.hidden-trigger {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
pointer-events: none;
}
</style>
<style>
/* 物料明细提示框样式 */
.material-detail-tooltip {
max-width: 300px !important;
padding: 12px !important;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
border: 1px solid #ebeef5;
}
.material-detail-tooltip .material-item {
display: flex;
justify-content: space-between;
padding: 6px 0;
border-bottom: 1px dashed #eee;
font-size: 13px;
}
.material-detail-tooltip .material-item:last-child {
border-bottom: none;
}
.material-detail-tooltip .material-name {
flex: 3;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
}
.material-detail-tooltip .material-quantity {
flex: 1;
text-align: right;
color: #f56c6c;
font-weight: bold;
}
.material-detail-tooltip {
/* 增加整体宽度 */
min-width: 280px; /* 最小宽度 */
max-width: 400px; /* 最大宽度 */
width: auto !important; /* 宽度自适应 */
}
.material-detail-tooltip .material-item {
display: flex;
justify-content: space-between;
padding: 6px 0;
border-bottom: 1px dashed #eee;
font-size: 13px;
/* 增加内容区域宽度 */
width: 100%; /* 占满整个容器 */
}
/* 物料名称部分 */
.material-detail-tooltip .material-name {
flex: 1; /* 占据剩余空间 */
min-width: 150px; /* 最小宽度 */
margin-right: 15px; /* 增加右侧间距 */
word-break: break-word; /* 允许单词换行 */
}
/* 物料数量部分 */
.material-detail-tooltip .material-quantity {
flex-shrink: 0; /* 防止被压缩 */
width: 60px; /* 固定宽度 */
text-align: right; /* 右对齐 */
}
</style>

View File

@ -6,7 +6,7 @@ import CustomNavbar from "./components/CustomNavbar.vue";
import CategoryPanel from "./components/CategoryPanel.vue"; import CategoryPanel from "./components/CategoryPanel.vue";
import footRight from "./components/footRight.vue"; import footRight from "./components/footRight.vue";
import PageSkeleton from "./components/PageSkeleton.vue"; import PageSkeleton from "./components/PageSkeleton.vue";
import { getHomeCategoryAPI, getUnreadMessage } from "@/services/home"; import {countReview, getHomeCategoryAPI, getUnreadMessage} from "@/services/home";
// //
const categoryList = ref([ const categoryList = ref([
{ {
@ -107,10 +107,18 @@ const getHomeCategory = async () => {
}); });
} }
const unReadCount = await getUnreadMessage(); const unReadCount = await getUnreadMessage();
const count = await countReview();
// //
const cgdsp = categoryList.value.find(
(e) => e.path === "cgdsp"
);
const msgItem = categoryList.value.find( const msgItem = categoryList.value.find(
(e) => e.path === "messageNotification" (e) => e.path === "messageNotification"
); );
if (cgdsp){
cgdsp.unReadCount = count;
cgdsp.auth=true
}
if (msgItem) { if (msgItem) {
msgItem.unReadCount = unReadCount; msgItem.unReadCount = unReadCount;
msgItem.auth=true msgItem.auth=true

View File

@ -279,7 +279,9 @@ const handleScan = () => {
>预计生产日期{{ item.startTime }} {{ item.endTime }}</view >预计生产日期{{ item.startTime }} {{ item.endTime }}</view
> >
</view> </view>
<view class="statusText">{{ statusText }}</view>
<!-- <view class="statusText">{{ statusText }}</view>-->
<view :class="item.procedureStatus == 1 && item.reportStatus == 1 &&props.orderState == '0,1'? 'statusText1' : 'statusText'">{{ statusText }}</view>
</view> </view>
<!-- 底部提示文字 --> <!-- 底部提示文字 -->
<view <view
@ -389,6 +391,18 @@ const handleScan = () => {
color: #fff; color: #fff;
} }
.statusText1 {
position: absolute;
right: 30rpx;
top: 100rpx;
border-radius: 10rpx;
font-size: 24rpx;
padding: 10rpx 30rpx;
border-radius: 10rpx;
font-size: 24rpx;
background: linear-gradient(149deg, #4CAF50 4%, #388E3C 98%);
color: #fff;
}
&:last-child { &:last-child {
padding-bottom: 40rpx; padding-bottom: 40rpx;
} }

View File

@ -24,3 +24,10 @@ export const getUnreadMessage = () => {
url: '/heli/bdgzsomthing/unreadMessage', url: '/heli/bdgzsomthing/unreadMessage',
}) })
} }
export const countReview = () => {
return http<CategoryItem[]>({
method: 'GET',
url: '/heli/purchase-order-make/countReview',
})
}