From 5a16a9d2b14601d9e4ca7ccdf12d286ef4211e9c Mon Sep 17 00:00:00 2001 From: jhd <1684074631@qq.com> Date: Fri, 29 May 2026 15:53:26 +0800 Subject: [PATCH 01/18] =?UTF-8?q?wip=E5=9C=A8=E4=BA=A7=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WmsCoilPendingActionController.java | 9 ++ .../com/klp/domain/vo/ProcessTodayAggVo.java | 23 +++++ .../java/com/klp/domain/vo/ProcessWipVo.java | 33 +++++++ .../java/com/klp/domain/vo/WipCoilVo.java | 36 ++++++++ .../com/klp/domain/vo/WipDashboardVo.java | 27 ++++++ .../mapper/WmsCoilPendingActionMapper.java | 14 +++ .../service/IWmsCoilPendingActionService.java | 6 ++ .../impl/WmsCoilPendingActionServiceImpl.java | 87 +++++++++++++++++++ .../mapper/klp/WmsCoilPendingActionMapper.xml | 31 +++++++ 9 files changed, 266 insertions(+) create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/ProcessTodayAggVo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/ProcessWipVo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WipCoilVo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WipDashboardVo.java diff --git a/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java b/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java index 785ac40c..1d240fba 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsCoilPendingActionController.java @@ -17,6 +17,7 @@ import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; +import com.klp.domain.vo.WipDashboardVo; import com.klp.domain.vo.WmsCoilPendingActionVo; import com.klp.domain.vo.WmsCoilPendingActionIdCoilVo; import com.klp.domain.vo.TheoryCycleRegressionResultVo; @@ -165,6 +166,14 @@ public class WmsCoilPendingActionController extends BaseController { return iWmsCoilPendingActionService.queryStaleActionPageList(pageQuery); } + /** + * WIP 在产大屏:获取各工序在产列表及今日完成统计 + */ + @GetMapping("/wip/dashboard") + public R wipDashboard() { + return R.ok(iWmsCoilPendingActionService.getWipDashboard()); + } + /** * 计算理论节拍回归(默认近6个月),并返回散点+拟合线 */ diff --git a/klp-wms/src/main/java/com/klp/domain/vo/ProcessTodayAggVo.java b/klp-wms/src/main/java/com/klp/domain/vo/ProcessTodayAggVo.java new file mode 100644 index 00000000..91398cd5 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/ProcessTodayAggVo.java @@ -0,0 +1,23 @@ +package com.klp.domain.vo; + +import lombok.Data; +import java.math.BigDecimal; + +/** + * 工序今日完成统计(数据库聚合结果) + * + * @author Joshi + * @date 2026-05-29 + */ +@Data +public class ProcessTodayAggVo { + + /** 操作类型编码 */ + private Integer actionType; + + /** 完成卷数 */ + private Integer completedCount; + + /** 总重量(kg) */ + private BigDecimal totalWeight; +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/ProcessWipVo.java b/klp-wms/src/main/java/com/klp/domain/vo/ProcessWipVo.java new file mode 100644 index 00000000..aa1e6f4a --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/ProcessWipVo.java @@ -0,0 +1,33 @@ +package com.klp.domain.vo; + +import lombok.Data; +import java.math.BigDecimal; +import java.util.List; + +/** + * 单个工序的 WIP 统计 + * + * @author Joshi + * @date 2026-05-29 + */ +@Data +public class ProcessWipVo { + + /** 操作类型编码(501=酸连轧工序) */ + private Integer actionType; + + /** 工序名称 */ + private String processName; + + /** 在产数量 */ + private int wipCount; + + /** 在产钢卷列表 */ + private List wipCoils; + + /** 今日完成卷数 */ + private int todayCompletedCount; + + /** 今日完成重量(吨) */ + private BigDecimal todayCompletedWeight; +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WipCoilVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WipCoilVo.java new file mode 100644 index 00000000..fe9c5e17 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WipCoilVo.java @@ -0,0 +1,36 @@ +package com.klp.domain.vo; + +import lombok.Data; +import java.math.BigDecimal; +import java.util.Date; + +/** + * WIP 在产钢卷 + * + * @author Joshi + * @date 2026-05-29 + */ +@Data +public class WipCoilVo { + + /** 操作类型 */ + private Integer actionType; + + /** 操作ID */ + private Long actionId; + + /** 钢卷ID */ + private Long coilId; + + /** 当前钢卷号 */ + private String currentCoilNo; + + /** 净重(kg) */ + private BigDecimal netWeight; + + /** 创建时间(领料时间) */ + private Date createTime; + + /** 创建人 */ + private String createBy; +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WipDashboardVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WipDashboardVo.java new file mode 100644 index 00000000..46fe7a35 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WipDashboardVo.java @@ -0,0 +1,27 @@ +package com.klp.domain.vo; + +import lombok.Data; +import java.math.BigDecimal; +import java.util.List; + +/** + * WIP 在产大屏 仪表盘视图对象 + * + * @author Joshi + * @date 2026-05-29 + */ +@Data +public class WipDashboardVo { + + /** 各工序汇总 */ + private List processes; + + /** 全局在产总数 */ + private int totalWipCount; + + /** 全局今日完成总卷数 */ + private int totalTodayCompletedCount; + + /** 全局今日完成总重量(吨) */ + private BigDecimal totalTodayCompletedWeight; +} diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java index 9c3af748..190b7181 100644 --- a/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java +++ b/klp-wms/src/main/java/com/klp/mapper/WmsCoilPendingActionMapper.java @@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.klp.common.core.mapper.BaseMapperPlus; import com.klp.domain.WmsCoilPendingAction; +import com.klp.domain.vo.ProcessTodayAggVo; +import com.klp.domain.vo.WipCoilVo; import com.klp.domain.vo.WmsCoilPendingActionVo; import com.klp.domain.vo.WmsCoilPendingActionIdCoilVo; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; /** @@ -69,5 +72,16 @@ public interface WmsCoilPendingActionMapper extends BaseMapperPlus selectPendingByActionTypes( @Param("actionTypes") java.util.Collection actionTypes); + + /** + * WIP 大屏:查询在产(actionStatus=1)钢卷列表,关联物料表取净重 + */ + List selectWipCoils(); + + /** + * WIP 大屏:查询今日已完成(actionStatus=2)聚合统计 + * @param todayStart 今日 00:00:00 + */ + List selectTodayCompletedAgg(@Param("todayStart") Date todayStart); } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java b/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java index 90eeecd2..20aec44b 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsCoilPendingActionService.java @@ -10,6 +10,7 @@ import java.util.Collection; import java.util.List; import java.util.Date; import com.klp.domain.vo.TheoryCycleRegressionResultVo; +import com.klp.domain.vo.WipDashboardVo; /** * 钢卷待操作Service接口 @@ -97,5 +98,10 @@ public interface IWmsCoilPendingActionService { * @param maxPoints 最大散点数(includePoints=true 时生效) */ TheoryCycleRegressionResultVo calcTheoryCycleRegression(Date startTime, Date endTime, Boolean includePoints, Integer maxPoints); + + /** + * WIP 在产大屏:获取各工序在产列表及今日完成统计 + */ + WipDashboardVo getWipDashboard(); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java index b948adfd..7353e3fe 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java @@ -14,9 +14,13 @@ import com.klp.common.utils.StringUtils; import com.klp.domain.WmsCoilPendingAction; import com.klp.domain.WmsMaterialCoil; import com.klp.domain.bo.WmsCoilPendingActionBo; +import com.klp.domain.vo.ProcessTodayAggVo; +import com.klp.domain.vo.ProcessWipVo; import com.klp.domain.vo.TheoryCyclePointVo; import com.klp.domain.vo.TheoryCycleRegressionResultVo; import com.klp.domain.vo.TheoryCycleRegressionVo; +import com.klp.domain.vo.WipCoilVo; +import com.klp.domain.vo.WipDashboardVo; import com.klp.domain.vo.WmsCoilPendingActionVo; import com.klp.domain.vo.WmsCoilPendingActionIdCoilVo; import com.klp.domain.DrMillProductionPlan; @@ -64,6 +68,26 @@ public class WmsCoilPendingActionServiceImpl implements IWmsCoilPendingActionSer private static final int ACTION_TYPE_DR_NORMAL = 504; private static final int ACTION_TYPE_DR_REPAIR = 524; + /** actionType → 工序名称映射 */ + private static final Map PROCESS_NAME_MAP = new LinkedHashMap<>(); + static { + PROCESS_NAME_MAP.put(501, "酸连轧工序"); + PROCESS_NAME_MAP.put(502, "镀锌工序"); + PROCESS_NAME_MAP.put(503, "脱脂工序"); + // 504=拉矫平整工序 (but 504 is also DR_NORMAL, use a more specific name) + PROCESS_NAME_MAP.put(504, "拉矫平整工序"); + PROCESS_NAME_MAP.put(505, "双机架工序"); + PROCESS_NAME_MAP.put(506, "镀铬工序"); + // 520-525 修复工序 + PROCESS_NAME_MAP.put(520, "酸轧修复工序"); + PROCESS_NAME_MAP.put(521, "镀锌修复工序"); + PROCESS_NAME_MAP.put(522, "脱脂修复工序"); + PROCESS_NAME_MAP.put(523, "拉矫修复工序"); + PROCESS_NAME_MAP.put(524, "双机架修复工序"); + PROCESS_NAME_MAP.put(525, "镀铬修复工序"); + // 纵剪分条无明确编码,暂不纳入 + } + private static final String REDIS_KEY_IDEAL_CYCLE = "oee:ideal-cycle-time"; /** @@ -744,6 +768,69 @@ public class WmsCoilPendingActionServiceImpl implements IWmsCoilPendingActionSer return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); } + /** + * WIP 在产大屏:获取各工序在产列表及今日完成统计 + */ + @Override + public WipDashboardVo getWipDashboard() { + // 1. 查询今日 00:00:00 + LocalDateTime todayStart = LocalDateTime.now().toLocalDate().atStartOfDay(); + Date todayStartDate = Date.from(todayStart.atZone(ZoneId.systemDefault()).toInstant()); + + // 2. 查询在产钢卷列表 + List wipCoils = baseMapper.selectWipCoils(); + + // 3. 查询今日已完成聚合统计 + List todayAggList = baseMapper.selectTodayCompletedAgg(todayStartDate); + + // 4. 按 actionType 分组在产钢卷 + Map> wipMap = wipCoils.stream() + .collect(Collectors.groupingBy(WipCoilVo::getActionType)); + + // 5. 按 actionType 分组今日完成统计 + Map aggMap = todayAggList.stream() + .collect(Collectors.toMap(ProcessTodayAggVo::getActionType, a -> a)); + + // 6. 按固定工序顺序构建返回结果 + List processes = new ArrayList<>(); + int totalWipCount = 0; + int totalTodayCompletedCount = 0; + BigDecimal totalTodayCompletedWeight = BigDecimal.ZERO; + + for (Map.Entry entry : PROCESS_NAME_MAP.entrySet()) { + Integer actionType = entry.getKey(); + String processName = entry.getValue(); + + List coils = wipMap.getOrDefault(actionType, Collections.emptyList()); + ProcessTodayAggVo agg = aggMap.get(actionType); + + ProcessWipVo p = new ProcessWipVo(); + p.setActionType(actionType); + p.setProcessName(processName); + p.setWipCount(coils.size()); + p.setWipCoils(coils); + p.setTodayCompletedCount(agg != null ? agg.getCompletedCount() : 0); + // 数据库存储为 kg,转为吨(保留 1 位小数) + BigDecimal weightKg = agg != null ? agg.getTotalWeight() : BigDecimal.ZERO; + BigDecimal weightTon = weightKg.divide(BigDecimal.valueOf(1000), 1, RoundingMode.HALF_UP); + p.setTodayCompletedWeight(weightTon); + + totalWipCount += p.getWipCount(); + totalTodayCompletedCount += p.getTodayCompletedCount(); + totalTodayCompletedWeight = totalTodayCompletedWeight.add(weightTon); + + processes.add(p); + } + + // 7. 组装响应 + WipDashboardVo vo = new WipDashboardVo(); + vo.setProcesses(processes); + vo.setTotalWipCount(totalWipCount); + vo.setTotalTodayCompletedCount(totalTodayCompletedCount); + vo.setTotalTodayCompletedWeight(totalTodayCompletedWeight); + return vo; + } + private static class RegressionStat { Double slope; Double intercept; diff --git a/klp-wms/src/main/resources/mapper/klp/WmsCoilPendingActionMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsCoilPendingActionMapper.xml index 8d62ec34..69945d25 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsCoilPendingActionMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsCoilPendingActionMapper.xml @@ -54,6 +54,7 @@ wmc.supplier_coil_no as supplierCoilNo, wmc.item_id as itemId, wmc.item_type as itemType, + wmc.net_weight as weight, w.warehouse_name AS warehouseName, aw.actual_warehouse_name AS actualWarehouseName, CASE WHEN wmc.item_type = 'raw_material' THEN rm.specification @@ -118,6 +119,7 @@ wmc.supplier_coil_no as supplierCoilNo, wmc.item_id as itemId, wmc.item_type as itemType, + wmc.net_weight as weight, w.warehouse_name AS warehouseName, aw.actual_warehouse_name AS actualWarehouseName, CASE WHEN wmc.item_type = 'raw_material' THEN rm.specification @@ -224,5 +226,34 @@ ) + + + + + + From 8572a60044123c562f9835d3648a074478cc718a Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 2 Jun 2026 11:02:56 +0800 Subject: [PATCH 02/18] =?UTF-8?q?feat(qc):=20=E6=96=B0=E5=A2=9E=E8=B4=A8?= =?UTF-8?q?=E9=87=8F=E6=A3=80=E9=AA=8C=E8=AF=81=E4=B9=A6=E5=8E=9F=E6=96=99?= =?UTF-8?q?=E5=8D=B7=E5=8F=B7=E3=80=81=E8=A1=A8=E9=9D=A2=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=8E=E8=B0=83=E8=B4=A8=E5=BA=A6=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在质量检验证书项(QcCertificateItem)中新增以下字段: 1. 原料卷号(rawCoilNo) 2. 表面处理(surfaceTreatment) 3. 调质度(temperDegree) 调整涉及实体类、业务对象、值对象及映射文件,确保字段在查询条件、导出模板中生效。 --- .../klp/mes/qc/domain/QcCertificateItem.java | 12 ++++++++++++ .../mes/qc/domain/bo/QcCertificateItemBo.java | 15 +++++++++++++++ .../mes/qc/domain/vo/QcCertificateItemVo.java | 18 ++++++++++++++++++ .../impl/QcCertificateItemServiceImpl.java | 3 +++ .../mapper/qc/QcCertificateItemMapper.xml | 3 +++ 5 files changed, 51 insertions(+) diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/QcCertificateItem.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/QcCertificateItem.java index 73e105d4..4c60e36c 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/domain/QcCertificateItem.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/QcCertificateItem.java @@ -37,6 +37,10 @@ public class QcCertificateItem extends BaseEntity { * 钢卷号 */ private String coilNo; + /** + * 原料卷号 + */ + private String rawCoilNo; /** * 炉号 */ @@ -145,6 +149,10 @@ public class QcCertificateItem extends BaseEntity { * 表面结构 */ private String surfaceStructure; + /** + * 表面处理 + */ + private String surfaceTreatment; /** * 镀层表面结构 */ @@ -161,6 +169,10 @@ public class QcCertificateItem extends BaseEntity { * 备注 */ private String remark; + /** + * 调质度 + */ + private String temperDegree; /** * 删除标志(0=正常,1=已删除) */ diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/QcCertificateItemBo.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/QcCertificateItemBo.java index 333662da..ef8f320a 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/QcCertificateItemBo.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/bo/QcCertificateItemBo.java @@ -38,6 +38,11 @@ public class QcCertificateItemBo extends BaseEntity { */ private String coilNo; + /** + * 原料卷号 + */ + private String rawCoilNo; + /** * 炉号 */ @@ -173,6 +178,11 @@ public class QcCertificateItemBo extends BaseEntity { */ private String surfaceStructure; + /** + * 表面处理 + */ + private String surfaceTreatment; + /** * 镀层表面结构 */ @@ -193,5 +203,10 @@ public class QcCertificateItemBo extends BaseEntity { */ private String remark; + /** + * 调质度 + */ + private String temperDegree; + } diff --git a/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/QcCertificateItemVo.java b/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/QcCertificateItemVo.java index df77b86a..563419a9 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/QcCertificateItemVo.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/domain/vo/QcCertificateItemVo.java @@ -43,6 +43,12 @@ public class QcCertificateItemVo { @ExcelProperty(value = "钢卷号") private String coilNo; + /** + * 原料卷号 + */ + @ExcelProperty(value = "原料卷号") + private String rawCoilNo; + /** * 炉号 */ @@ -205,6 +211,12 @@ public class QcCertificateItemVo { @ExcelProperty(value = "表面结构") private String surfaceStructure; + /** + * 表面处理 + */ + @ExcelProperty(value = "表面处理") + private String surfaceTreatment; + /** * 镀层表面结构 */ @@ -229,5 +241,11 @@ public class QcCertificateItemVo { @ExcelProperty(value = "备注") private String remark; + /** + * 调质度 + */ + @ExcelProperty(value = "调质度") + private String temperDegree; + } diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcCertificateItemServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcCertificateItemServiceImpl.java index 2ab259e0..9ea67432 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcCertificateItemServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcCertificateItemServiceImpl.java @@ -64,6 +64,7 @@ public class QcCertificateItemServiceImpl implements IQcCertificateItemService { lqw.eq(bo.getCertificateId() != null, QcCertificateItem::getCertificateId, bo.getCertificateId()); lqw.eq(bo.getCoilId() != null, QcCertificateItem::getCoilId, bo.getCoilId()); lqw.eq(StringUtils.isNotBlank(bo.getCoilNo()), QcCertificateItem::getCoilNo, bo.getCoilNo()); + lqw.eq(StringUtils.isNotBlank(bo.getRawCoilNo()), QcCertificateItem::getRawCoilNo, bo.getRawCoilNo()); lqw.eq(StringUtils.isNotBlank(bo.getHeatNo()), QcCertificateItem::getHeatNo, bo.getHeatNo()); lqw.eq(StringUtils.isNotBlank(bo.getMaterialType()), QcCertificateItem::getMaterialType, bo.getMaterialType()); lqw.eq(StringUtils.isNotBlank(bo.getSize()), QcCertificateItem::getSize, bo.getSize()); @@ -91,9 +92,11 @@ public class QcCertificateItemServiceImpl implements IQcCertificateItemService { lqw.eq(StringUtils.isNotBlank(bo.getBendingTest()), QcCertificateItem::getBendingTest, bo.getBendingTest()); lqw.eq(StringUtils.isNotBlank(bo.getSurfaceQuality()), QcCertificateItem::getSurfaceQuality, bo.getSurfaceQuality()); lqw.eq(StringUtils.isNotBlank(bo.getSurfaceStructure()), QcCertificateItem::getSurfaceStructure, bo.getSurfaceStructure()); + lqw.eq(StringUtils.isNotBlank(bo.getSurfaceTreatment()), QcCertificateItem::getSurfaceTreatment, bo.getSurfaceTreatment()); lqw.eq(StringUtils.isNotBlank(bo.getCoatingSurfaceStructure()), QcCertificateItem::getCoatingSurfaceStructure, bo.getCoatingSurfaceStructure()); lqw.eq(bo.getCoatingMass() != null, QcCertificateItem::getCoatingMass, bo.getCoatingMass()); lqw.eq(StringUtils.isNotBlank(bo.getEdgeStatus()), QcCertificateItem::getEdgeStatus, bo.getEdgeStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getTemperDegree()), QcCertificateItem::getTemperDegree, bo.getTemperDegree()); return lqw; } diff --git a/klp-mes/src/main/resources/mapper/qc/QcCertificateItemMapper.xml b/klp-mes/src/main/resources/mapper/qc/QcCertificateItemMapper.xml index 02f26ecd..e5cc3eee 100644 --- a/klp-mes/src/main/resources/mapper/qc/QcCertificateItemMapper.xml +++ b/klp-mes/src/main/resources/mapper/qc/QcCertificateItemMapper.xml @@ -9,6 +9,7 @@ + @@ -36,10 +37,12 @@ + + From 4295a28f33ba55d1e5c411ff03e2372d2db7125a Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 2 Jun 2026 11:11:55 +0800 Subject: [PATCH 03/18] =?UTF-8?q?feat(wms/coil):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=B7=B2=E7=BB=91=E5=AE=9A=E9=92=A2=E5=8D=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8C=89=E5=8F=91=E8=B4=A7=E8=AE=A1=E5=88=92=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=80=92=E5=BA=8F=E6=8E=92=E5=BA=8F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在钢卷查询业务中,当查询已绑定钢卷列表且未指定计划ID(planId)时,新增按关联的发货计划创建时间倒序排序功能,确保较新的计划优先展示。 主要改动: 1. 在WmsMaterialCoilBo中新增orderByPlanDesc布尔字段,用于控制排序逻辑 2. 在WmsMaterialCoilMapper中新增selectVoPagePlusPlanOrder方法及对应的XML映射,通过关联发货计划表支持按计划创建时间排序 3. 在WmsMaterialCoilServiceImpl中调整查询逻辑:当orderByPlanDesc为true时调用新的查询方法,并在查询条件中补充排序规则 4. 在WmsDeliveryWaybillDetailController中设置orderByPlanDesc条件:当planId为空时启用该排序 5. 重构XML映射文件,提取公共SQL片段以提高可维护性 调整前,已绑定钢卷列表在无planId时仅按状态排序;调整后,新增按发货计划创建时间倒序排序,便于用户快速查看最新计划相关的钢卷。 --- .../WmsDeliveryWaybillDetailController.java | 5 +- .../com/klp/domain/bo/WmsMaterialCoilBo.java | 6 + .../com/klp/mapper/WmsMaterialCoilMapper.java | 7 +- .../impl/WmsMaterialCoilServiceImpl.java | 8 +- .../mapper/klp/WmsMaterialCoilMapper.xml | 291 +++++++----------- 5 files changed, 130 insertions(+), 187 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java b/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java index 22ce9eb4..ed6e896b 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java @@ -148,7 +148,10 @@ public class WmsDeliveryWaybillDetailController extends BaseController { return new TableDataInfo<>(); } bo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(java.util.stream.Collectors.joining(","))); - bo.setStatusFirst(true); // 未发货的排在前面 + bo.setStatusFirst(true); + if (planId == null) { + bo.setOrderByPlanDesc(true); + } return iWmsMaterialCoilService.queryPageListWithBindInfo(bo, pageQuery); } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index be9b965c..2ca363f0 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -396,5 +396,11 @@ public class WmsMaterialCoilBo extends BaseEntity { * 镀铬卷号 */ private String chromePlateCoilNo; + + /** + * 是否按计划创建时间倒序排序(已绑定钢卷列表无planId时,按计划新旧排列) + */ + @TableField(exist = false) + private Boolean orderByPlanDesc; } diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsMaterialCoilMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsMaterialCoilMapper.java index f893c0cf..ddb0f0de 100644 --- a/klp-wms/src/main/java/com/klp/mapper/WmsMaterialCoilMapper.java +++ b/klp-wms/src/main/java/com/klp/mapper/WmsMaterialCoilMapper.java @@ -45,6 +45,11 @@ public interface WmsMaterialCoilMapper extends BaseMapperPlus selectVoPagePlusOrderBy(Page build, @Param("ew") QueryWrapper lqw); + /** + * orderByPlanDesc=true 时使用:包含发货计划 join,支持按计划创建时间排序 + */ + Page selectVoPagePlusPlanOrder(Page build, @Param("ew") QueryWrapper lqw); + List selectVoListWithDynamicJoin(@Param("ew")QueryWrapper lqw); Map selectCountForSpecSync(@Param("ew") QueryWrapper qw); @@ -91,7 +96,7 @@ public interface WmsMaterialCoilMapper extends BaseMapperPlus selectDeliveryExportListByCoilIds(@Param("coilIds") java.util.Collection coilIds); + List selectDeliveryExportListByCoilIds(@Param("coilIds") java.util.Collection coilIds); /** * 退火报表导出:按钢卷ID列表联查(钢卷 + 退火计划 + 退火计划钢卷关系) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 7018d87b..f64ce531 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -487,7 +487,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { private Page queryMaterialCoilPage(WmsMaterialCoilBo bo, PageQuery pageQuery) { QueryWrapper qw = buildQueryWrapperPlus(bo); Page result; - if (Boolean.TRUE.equals(bo.getOrderBy())) { + if (Boolean.TRUE.equals(bo.getOrderByPlanDesc())) { + result = baseMapper.selectVoPagePlusPlanOrder(pageQuery.build(), qw); + } else if (Boolean.TRUE.equals(bo.getOrderBy())) { result = baseMapper.selectVoPagePlusOrderBy(pageQuery.build(), qw); } else { result = baseMapper.selectVoPagePlus(pageQuery.build(), qw); @@ -933,6 +935,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { qw.apply("COALESCE(ca.abnormal_count, 0) >= {0}", bo.getMinAbnormalCount()); } // 排序: + // 按计划创建时间倒序(已绑定钢卷列表无planId时优先按计划排序) + if (Boolean.TRUE.equals(bo.getOrderByPlanDesc())) { + qw.orderByDesc("pl.create_time"); + } // 已绑定钢卷列表中,未发货(status=0)的排在前面 if (Boolean.TRUE.equals(bo.getStatusFirst())) { qw.orderByAsc("mc.status = 1"); diff --git a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml index 3c119a78..3c19110b 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml @@ -82,90 +82,91 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" GROUP BY w.warehouse_id, w.warehouse_name ORDER BY w.warehouse_id - + SELECT + ${ew.customSqlSegment} - + + + From b59bb1789e5513c30f9ca9c6d8255a388a62b9a8 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 2 Jun 2026 11:48:44 +0800 Subject: [PATCH 04/18] =?UTF-8?q?fix(wms/coil):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=90=86=E8=AE=BA=E5=8E=9A=E5=BA=A6=E4=B8=8E=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E4=B8=AD=E5=AE=BD=E5=BA=A6=E4=B8=BA=E9=9B=B6?= =?UTF-8?q?=E7=9A=84=E9=99=A4=E9=9B=B6=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在钢卷理论计算逻辑中,当实际宽度为零时,计算理论厚度和理论长度会导致除零异常。调整前,仅校验实际长度不为空;调整后,增加实际宽度大于零的校验,避免无效计算。同时修正理论厚度和理论长度的计算公式,统一使用乘1000替代除1000,确保计算精度和单位转换正确。 --- .../com/klp/service/impl/WmsMaterialCoilServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index f64ce531..8423c916 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -1089,15 +1089,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { BigDecimal volume = weight.multiply(new BigDecimal("1000")).divide(new BigDecimal("7.85"), 10, RoundingMode.HALF_UP); // 计算理论厚度(需要实测长度) - if (bo.getTheoreticalThickness() == null && bo.getActualLength() != null) { + if (bo.getTheoreticalThickness() == null && bo.getActualLength() != null && bo.getActualWidth().compareTo(BigDecimal.ZERO) > 0) { BigDecimal length = new BigDecimal(bo.getActualLength()); - BigDecimal theoreticalThickness = volume.divide(length, 10, RoundingMode.HALF_UP).divide(width, 3, RoundingMode.HALF_UP).divide(new BigDecimal("1000"), 3, RoundingMode.HALF_UP); + BigDecimal theoreticalThickness = volume.divide(length, 10, RoundingMode.HALF_UP).divide(width, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("1000")); bo.setTheoreticalThickness(theoreticalThickness); } // 计算理论长度 if (bo.getTheoreticalLength() == null) { - BigDecimal theoreticalLength = volume.divide(thickness, 10, RoundingMode.HALF_UP).divide(width, 10, RoundingMode.HALF_UP).divide(new BigDecimal("1000"), 3, RoundingMode.HALF_UP); + BigDecimal theoreticalLength = volume.divide(thickness, 10, RoundingMode.HALF_UP).divide(width, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("1000")); bo.setTheoreticalLength(theoreticalLength); } } catch (Exception e) { From d6620e24491cd081c22f48352a3e55f717ede413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= <2178503051@qq.com> Date: Tue, 2 Jun 2026 13:22:58 +0800 Subject: [PATCH 05/18] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=B4=A8?= =?UTF-8?q?=E4=BF=9D=E4=B9=A6=E6=A8=A1=E6=9D=BF=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=87=E7=AD=BE=E6=A0=B7=E5=BC=8F=E4=B8=8E?= =?UTF-8?q?=E9=92=A2=E5=8D=B7=E4=BF=A1=E6=81=AF=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klp-ui/src/components/CoilSelector/data.js | 6 +- klp-ui/src/views/mes/qc/certificate/book.vue | 93 ++++- .../components/CertificatePrintPreview.vue | 342 +--------------- .../components/templates/ChromiumTemplate.vue | 347 ++++++++++++++++ .../components/templates/ColdHardTemplate.vue | 356 +++++++++++++++++ .../templates/GalvanizingTemplate.vue | 360 +++++++++++++++++ .../templates/RawMaterialTemplate.vue | 378 ++++++++++++++++++ .../certificate/components/templates/index.js | 20 + klp-ui/src/views/mes/qc/certificate/item.vue | 169 +++++++- .../views/wms/coil/components/CoilInfo.vue | 67 +++- .../wms/coil/panels/LabelRender/DuGeTag.vue | 7 +- .../panels/LabelRender/ForgeTagPreview.vue | 3 +- .../coil/panels/LabelRender/GalvanizedTag.vue | 7 +- .../coil/panels/LabelRender/MaterialTag.vue | 18 +- .../panels/LabelRender/OuterTagPreview.vue | 7 +- .../LabelRender/SaltSprayTagPreview.vue | 3 +- .../panels/LabelRender/SampleTagPreview.vue | 3 +- .../wms/coil/panels/LabelRender/SplitTag.vue | 8 +- .../wms/coil/panels/LabelRender/TuoZhiTag.vue | 16 +- .../wms/coil/panels/LabelRender/WhereTag.vue | 5 +- .../coil/panels/LabelRender/ZincRawTag.vue | 16 +- .../coil/panels/LabelRender/label-common.css | 3 + .../wms/report/components/setting/columns.vue | 6 +- 23 files changed, 1851 insertions(+), 389 deletions(-) create mode 100644 klp-ui/src/views/mes/qc/certificate/components/templates/ChromiumTemplate.vue create mode 100644 klp-ui/src/views/mes/qc/certificate/components/templates/ColdHardTemplate.vue create mode 100644 klp-ui/src/views/mes/qc/certificate/components/templates/GalvanizingTemplate.vue create mode 100644 klp-ui/src/views/mes/qc/certificate/components/templates/RawMaterialTemplate.vue create mode 100644 klp-ui/src/views/mes/qc/certificate/components/templates/index.js create mode 100644 klp-ui/src/views/wms/coil/panels/LabelRender/label-common.css diff --git a/klp-ui/src/components/CoilSelector/data.js b/klp-ui/src/components/CoilSelector/data.js index 8b267787..bb63d575 100644 --- a/klp-ui/src/components/CoilSelector/data.js +++ b/klp-ui/src/components/CoilSelector/data.js @@ -200,7 +200,11 @@ export const optionalColumns = [ { label: '厂家', value: 'manufacturer' }, { label: '表面处理', value: 'surfaceTreatmentDesc' }, { label: '镀层质量', value: 'zincLayer' }, - { label: '长度', value: 'length' }, + { label: '实测长度', value: 'actualLength' }, + { label: '理论长度', value: 'theoreticalLength' }, + { label: '实测厚度', value: 'actualThickness' }, + { label: '理论厚度', value: 'theoreticalThickness' }, + { label: '实测宽度', value: 'actualWidth' }, { label: '毛重', value: 'grossWeight' }, { label: '净重', value: 'netWeight' }, { label: '创建时间', value: 'createTime' }, diff --git a/klp-ui/src/views/mes/qc/certificate/book.vue b/klp-ui/src/views/mes/qc/certificate/book.vue index c99f3877..c84e3938 100644 --- a/klp-ui/src/views/mes/qc/certificate/book.vue +++ b/klp-ui/src/views/mes/qc/certificate/book.vue @@ -207,7 +207,8 @@ :visible="true" :preview="true" :certificate="previewData" - :items="previewItems" + :items="previewItems" + :template-type="selectedTemplateType" /> @@ -231,6 +251,7 @@ import { listCertificate, getCertificate, delCertificate, addCertificate, updateCertificate } from "@/api/mes/qc/certificate"; import { listCertificateItem } from "@/api/mes/qc/certificateItem"; import CertificatePrintPreview from "./components/CertificatePrintPreview.vue"; +import { templateOptions } from "./components/templates"; import { print as printPdf, downloadPdf } from "./lib/printUtils"; export default { @@ -240,6 +261,7 @@ export default { }, data() { return { + templateOptions, buttonLoading: false, loading: true, ids: [], @@ -258,6 +280,10 @@ export default { printComponentVisible: false, printCertificateData: {}, printItemsData: [], + templateDialogVisible: false, + selectedTemplateType: 'chromium', + templateActionType: 'print', + templateDialogResolve: null, queryParams: { pageNum: 1, pageSize: 10, @@ -449,6 +475,10 @@ export default { }, /** 预览按钮操作 */ async handlePreview(row) { + this.templateActionType = 'preview'; + const confirmed = await this.showTemplateDialog(); + if (!confirmed) return; + const certificateId = row.certificateId; this.loading = true; try { @@ -468,6 +498,10 @@ export default { }, /** 打印按钮操作 */ async handlePrint(row) { + this.templateActionType = 'print'; + const confirmed = await this.showTemplateDialog(); + if (!confirmed) return; + const certificateId = row.certificateId; await this.preparePrintComponent(certificateId); await this.$nextTick(); @@ -517,6 +551,19 @@ export default { } finally { this.loading = false; } + }, + showTemplateDialog() { + return new Promise((resolve) => { + this.templateDialogResolve = resolve; + this.templateDialogVisible = true; + }); + }, + confirmTemplate() { + this.templateDialogVisible = false; + if (this.templateDialogResolve) { + this.templateDialogResolve(true); + this.templateDialogResolve = null; + } } } }; @@ -538,4 +585,46 @@ export default { color: #1f79b9; font-weight: 500; } + +.template-selection { + padding: 20px; +} + +.template-radio-group { + display: flex; + flex-direction: column; + gap: 15px; +} + +.template-radio { + display: flex; + align-items: center; + margin: 0; + padding: 15px; + border: 1px solid #e4e7ed; + border-radius: 8px; + transition: all 0.3s ease; +} + +.template-radio:hover { + border-color: #409eff; + background-color: #ecf5ff; +} + +.template-radio.is-checked { + border-color: #409eff; + background-color: #ecf5ff; +} + +.template-option { + display: flex; + align-items: center; + gap: 10px; + font-size: 14px; +} + +.template-option i { + font-size: 20px; + color: #409eff; +} diff --git a/klp-ui/src/views/mes/qc/certificate/components/CertificatePrintPreview.vue b/klp-ui/src/views/mes/qc/certificate/components/CertificatePrintPreview.vue index a7db6687..9404b26c 100644 --- a/klp-ui/src/views/mes/qc/certificate/components/CertificatePrintPreview.vue +++ b/klp-ui/src/views/mes/qc/certificate/components/CertificatePrintPreview.vue @@ -1,131 +1,18 @@ + + diff --git a/klp-ui/src/views/mes/qc/certificate/components/templates/ColdHardTemplate.vue b/klp-ui/src/views/mes/qc/certificate/components/templates/ColdHardTemplate.vue new file mode 100644 index 00000000..1173b5d6 --- /dev/null +++ b/klp-ui/src/views/mes/qc/certificate/components/templates/ColdHardTemplate.vue @@ -0,0 +1,356 @@ + + + + + diff --git a/klp-ui/src/views/mes/qc/certificate/components/templates/GalvanizingTemplate.vue b/klp-ui/src/views/mes/qc/certificate/components/templates/GalvanizingTemplate.vue new file mode 100644 index 00000000..84ca61b8 --- /dev/null +++ b/klp-ui/src/views/mes/qc/certificate/components/templates/GalvanizingTemplate.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/klp-ui/src/views/mes/qc/certificate/components/templates/RawMaterialTemplate.vue b/klp-ui/src/views/mes/qc/certificate/components/templates/RawMaterialTemplate.vue new file mode 100644 index 00000000..1bcdd7e2 --- /dev/null +++ b/klp-ui/src/views/mes/qc/certificate/components/templates/RawMaterialTemplate.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/klp-ui/src/views/mes/qc/certificate/components/templates/index.js b/klp-ui/src/views/mes/qc/certificate/components/templates/index.js new file mode 100644 index 00000000..bf0c37f9 --- /dev/null +++ b/klp-ui/src/views/mes/qc/certificate/components/templates/index.js @@ -0,0 +1,20 @@ +import ChromiumTemplate from './ChromiumTemplate.vue'; +import GalvanizingTemplate from './GalvanizingTemplate.vue'; +import ColdHardTemplate from './ColdHardTemplate.vue'; +import RawMaterialTemplate from './RawMaterialTemplate.vue'; + +export const templateMap = { + chromium: ChromiumTemplate, + galvanizing: GalvanizingTemplate, + coldHard: ColdHardTemplate, + rawMaterial: RawMaterialTemplate +}; + +export const templateOptions = [ + { value: 'chromium', label: '镀铬质保书模版' }, + { value: 'galvanizing', label: '镀锌质保书模版' }, + { value: 'coldHard', label: '冷硬质保书模版' }, + { value: 'rawMaterial', label: '原料质保书模版' } +]; + +export default templateMap; diff --git a/klp-ui/src/views/mes/qc/certificate/item.vue b/klp-ui/src/views/mes/qc/certificate/item.vue index 02a728b9..369a3093 100644 --- a/klp-ui/src/views/mes/qc/certificate/item.vue +++ b/klp-ui/src/views/mes/qc/certificate/item.vue @@ -106,6 +106,11 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + :items="printItemsData" :template-type="selectedTemplateType" /> + + + +
+ + +
+ + {{ option.label }} +
+
+
+
+ +
@@ -347,6 +445,7 @@ import { listChemicalItem } from "@/api/mes/qc/chemicalItem"; import { listPhysicalItem } from "@/api/mes/qc/physicalItem"; import CoilSelector from "@/components/CoilSelector/index.vue"; import CertificatePrintPreview from "./components/CertificatePrintPreview.vue"; +import { templateOptions } from "./components/templates"; import { print as printPdf } from "./lib/printUtils"; export default { @@ -362,6 +461,7 @@ export default { }, data() { return { + templateOptions, buttonLoading: false, loading: false, certificateLoading: false, @@ -380,6 +480,9 @@ export default { printComponentVisible: false, printCertificateData: {}, printItemsData: [], + templateDialogVisible: false, + selectedTemplateType: 'chromium', + templateDialogResolve: null, certificateForm: { certificateNo: '', contractNo: '', @@ -527,13 +630,15 @@ export default { ]); const chem = chemRes.rows && chemRes.rows[0] || {}; const phys = physRes.rows && physRes.rows[0] || {}; - const { c, si, mn, p, s, als, yieldStrength, tensileStrength, elongation, hardness, bendingTest, surfaceQuality, surfaceStructure, edgeStatus } = { ...chem, ...phys }; - return { c, si, mn, p, s, als, yieldStrength, tensileStrength, elongation, hardness, bendingTest, surfaceQuality, surfaceStructure, edgeStatus }; + const { c, si, mn, p, s, als, al, ti, cr, ni, cu, n, fe, b } = chem; + const { yieldStrength, tensileStrength, elongation, hardness, bendingTest, surfaceQuality, surfaceStructure, edgeStatus, plasticExtensionStrength, coatingSurfaceStructure, coatingMass, coating, surfaceTreatment, zincCoatingWeight } = phys; + return { c, si, mn, p, s, als, al, ti, cr, ni, cu, n, fe, b, yieldStrength, tensileStrength, elongation, hardness, bendingTest, surfaceQuality, surfaceStructure, edgeStatus, plasticExtensionStrength, coatingSurfaceStructure, coatingMass, coating, surfaceTreatment, zincCoatingWeight }; }, async handleCoilSelect(row) { if (this.currentEditRow) { const editRow = this.currentEditRow; editRow.coilNo = row.currentCoilNo; + editRow.materialNo = row.enterCoilNo; editRow.materialType = row.material; editRow.size = row.specification; editRow.weight = row.netWeight; @@ -718,6 +823,9 @@ export default { }); }, async handlePrint() { + const confirmed = await this.showTemplateDialog(); + if (!confirmed) return; + this.printCertificateData = this.currentCertificateInfo; this.printItemsData = this.certificateItemList || []; this.$nextTick(() => { @@ -725,6 +833,19 @@ export default { console.log(el); printPdf(el); }); + }, + showTemplateDialog() { + return new Promise((resolve) => { + this.templateDialogResolve = resolve; + this.templateDialogVisible = true; + }); + }, + confirmTemplate() { + this.templateDialogVisible = false; + if (this.templateDialogResolve) { + this.templateDialogResolve(true); + this.templateDialogResolve = null; + } } } }; @@ -899,4 +1020,46 @@ export default { ::v-deep .el-table .cell { padding: 0; } + +.template-selection { + padding: 20px; +} + +.template-radio-group { + display: flex; + flex-direction: column; + gap: 15px; +} + +.template-radio { + display: flex; + align-items: center; + margin: 0; + padding: 15px; + border: 1px solid #e4e7ed; + border-radius: 8px; + transition: all 0.3s ease; +} + +.template-radio:hover { + border-color: #409eff; + background-color: #ecf5ff; +} + +.template-radio.is-checked { + border-color: #409eff; + background-color: #ecf5ff; +} + +.template-option { + display: flex; + align-items: center; + gap: 10px; + font-size: 14px; +} + +.template-option i { + font-size: 20px; + color: #409eff; +} diff --git a/klp-ui/src/views/wms/coil/components/CoilInfo.vue b/klp-ui/src/views/wms/coil/components/CoilInfo.vue index f5f6dc7d..b0bf216b 100644 --- a/klp-ui/src/views/wms/coil/components/CoilInfo.vue +++ b/klp-ui/src/views/wms/coil/components/CoilInfo.vue @@ -1,20 +1,16 @@