diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java index 8f8bc7597..7ec2aa370 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java @@ -265,4 +265,14 @@ public class CrmOrderBo extends BaseEntity { @JsonFormat(pattern = "yyyy-MM-dd") private Date deliveryDateEnd; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date bindDateStart; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date bindDateEnd; + + private Boolean onlyBoundSchedule; + } diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java index e6baee4c8..4a0807530 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java @@ -247,6 +247,24 @@ public class CrmOrderServiceImpl implements ICrmOrderService { qw.lt(bo.getSignDateEnd() != null, "co.sign_time", addOneDay(bo.getSignDateEnd())); qw.ge(bo.getDeliveryDateStart() != null, "co.delivery_date", bo.getDeliveryDateStart()); qw.lt(bo.getDeliveryDateEnd() != null, "co.delivery_date", addOneDay(bo.getDeliveryDateEnd())); + boolean applyBoundFilter = Boolean.TRUE.equals(bo.getOnlyBoundSchedule()) + || bo.getBindDateStart() != null + || bo.getBindDateEnd() != null; + if (applyBoundFilter) { + StringBuilder existsSql = new StringBuilder(); + List args = new ArrayList<>(); + existsSql.append("exists (select 1 from sch_sale_schedule_rel rel where rel.del_flag = 0 and rel.order_id = co.order_id"); + if (bo.getBindDateStart() != null) { + existsSql.append(" and rel.create_time >= {").append(args.size()).append("}"); + args.add(bo.getBindDateStart()); + } + if (bo.getBindDateEnd() != null) { + existsSql.append(" and rel.create_time < {").append(args.size()).append("}"); + args.add(addOneDay(bo.getBindDateEnd())); + } + existsSql.append(")"); + qw.apply(existsSql.toString(), args.toArray()); + } if(bo.getOrderIds() !=null){ qw.in(!bo.getOrderIds().isEmpty(), "co.order_id", bo.getOrderIds()); } diff --git a/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleItemController.java b/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleItemController.java index 6112cfe64..9b87bdf57 100644 --- a/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleItemController.java +++ b/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleItemController.java @@ -23,6 +23,7 @@ import com.klp.flow.domain.bo.SchProdScheduleItemBo; import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo; import com.klp.flow.domain.bo.SchProdScheduleItemReceiveBo; import com.klp.flow.domain.bo.SchProdScheduleItemMergeValidateBo; +import com.klp.flow.domain.bo.SchProdScheduleItemSortBo; import com.klp.flow.service.ISchProdScheduleItemService; import com.klp.common.core.page.TableDataInfo; @@ -138,4 +139,9 @@ public class SchProdScheduleItemController extends BaseController { public R mergeValidate(@Validated @RequestBody SchProdScheduleItemMergeValidateBo validateBo) { return R.ok(iSchProdScheduleItemService.validateMerge(validateBo)); } + + @PostMapping("/sort") + public R saveSort(@Validated @RequestBody SchProdScheduleItemSortBo sortBo) { + return toAjax(iSchProdScheduleItemService.saveSort(sortBo)); + } } diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java index 478c6cc0a..e21abec87 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java @@ -135,6 +135,10 @@ public class SchProdScheduleItem extends BaseEntity { * 工序ID */ private Long actionId; + /** + * 排序号 + */ + private Integer sortNo; /** * 规格 例:1.0X1250 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java index d8ef353f6..24ae30f5e 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java @@ -162,6 +162,10 @@ public class SchProdScheduleItemBo extends BaseEntity { * 工序ID */ private Long actionId; + /** + * 排序号 + */ + private Integer sortNo; /** * 规格 例:1.0X1250 diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemSortBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemSortBo.java new file mode 100644 index 000000000..e705b6de1 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemSortBo.java @@ -0,0 +1,14 @@ +package com.klp.flow.domain.bo; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Data +public class SchProdScheduleItemSortBo { + + @NotEmpty(message = "scheduleIds不能为空") + private List scheduleIds; +} + diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java index 13dd55394..e1162b47e 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java @@ -202,6 +202,11 @@ public class SchProdScheduleItemVo { @TableField(exist = false) private String stepName; + /** + * 排序号 + */ + private Integer sortNo; + /** * 规格 例:1.0X1250 */ diff --git a/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleItemService.java b/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleItemService.java index 1eea0f013..4a47d5c03 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleItemService.java +++ b/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleItemService.java @@ -7,6 +7,7 @@ import com.klp.flow.domain.bo.SchProdScheduleItemBo; import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo; import com.klp.flow.domain.bo.SchProdScheduleItemReceiveBo; import com.klp.flow.domain.bo.SchProdScheduleItemMergeValidateBo; +import com.klp.flow.domain.bo.SchProdScheduleItemSortBo; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; @@ -70,4 +71,9 @@ public interface ISchProdScheduleItemService { * 合并校验:检查待合并记录来源产需单的 header 字段是否一致 */ SchProdScheduleItemMergeValidateVo validateMerge(SchProdScheduleItemMergeValidateBo validateBo); + + /** + * 保存已排产拖拽排序 + */ + Boolean saveSort(SchProdScheduleItemSortBo sortBo); } diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java index e6c3bd07b..80076d069 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java @@ -13,6 +13,7 @@ import com.klp.flow.domain.bo.SchProdScheduleItemBo; import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo; import com.klp.flow.domain.bo.SchProdScheduleItemReceiveBo; import com.klp.flow.domain.bo.SchProdScheduleItemMergeValidateBo; +import com.klp.flow.domain.bo.SchProdScheduleItemSortBo; import com.klp.flow.domain.vo.SchProdScheduleItemVo; import com.klp.flow.domain.vo.SchProdScheduleItemMergeValidateVo; import com.klp.flow.domain.SchProdScheduleItem; @@ -56,7 +57,12 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi */ @Override public SchProdScheduleItemVo queryById(Long scheduleId){ - return baseMapper.selectVoById(scheduleId); + SchProdScheduleItemVo vo = baseMapper.selectVoById(scheduleId); + if (vo != null) { + fillStepName(java.util.Collections.singletonList(vo)); + fillMissingHeaderFields(java.util.Collections.singletonList(vo)); + } + return vo; } /** @@ -68,6 +74,7 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); if (result.getRecords() != null && !result.getRecords().isEmpty()) { fillStepName(result.getRecords()); + fillMissingHeaderFields(result.getRecords()); } return TableDataInfo.build(result); } @@ -81,6 +88,7 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi List list = baseMapper.selectVoList(lqw); if (list != null && !list.isEmpty()) { fillStepName(list); + fillMissingHeaderFields(list); } return list; } @@ -121,6 +129,8 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi lqw.eq(StringUtils.isNotBlank(bo.getRowRemark()), SchProdScheduleItem::getRowRemark, bo.getRowRemark()); // actionId lqw.eq(bo.getActionId() != null, SchProdScheduleItem::getActionId, bo.getActionId()); + lqw.orderByAsc(SchProdScheduleItem::getSortNo); + lqw.orderByAsc(SchProdScheduleItem::getScheduleId); return lqw; } @@ -148,6 +158,149 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi } } + private void fillMissingHeaderFields(List voList) { + List missingList = voList.stream() + .filter(vo -> StringUtils.isBlank(vo.getCustomerName()) + || StringUtils.isBlank(vo.getBusinessUser()) + || StringUtils.isBlank(vo.getBusinessPhone()) + || vo.getDeliveryCycle() == null + || StringUtils.isBlank(vo.getProductType()) + || StringUtils.isBlank(vo.getUsePurpose())) + .collect(Collectors.toList()); + + if (missingList.isEmpty()) { + return; + } + + List scheduleNos = missingList.stream() + .map(SchProdScheduleItemVo::getScheduleNo) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + + if (scheduleNos.isEmpty()) { + return; + } + + List headers = schProdScheduleMapper.selectList( + Wrappers.lambdaQuery() + .in(SchProdSchedule::getScheduleNo, scheduleNos) + ); + Map headerMap = headers.stream() + .collect(Collectors.toMap(SchProdSchedule::getScheduleNo, h -> h, (v1, v2) -> v1)); + + for (SchProdScheduleItemVo vo : missingList) { + SchProdSchedule header = headerMap.get(vo.getScheduleNo()); + if (header == null) { + continue; + } + + boolean changed = false; + SchProdScheduleItem update = new SchProdScheduleItem(); + update.setScheduleId(vo.getScheduleId()); + + if (StringUtils.isBlank(vo.getCustomerName()) && StringUtils.isNotBlank(header.getCustomerName())) { + vo.setCustomerName(header.getCustomerName()); + update.setCustomerName(header.getCustomerName()); + changed = true; + } + if (StringUtils.isBlank(vo.getBusinessUser()) && StringUtils.isNotBlank(header.getBusinessUser())) { + vo.setBusinessUser(header.getBusinessUser()); + update.setBusinessUser(header.getBusinessUser()); + changed = true; + } + if (StringUtils.isBlank(vo.getBusinessPhone()) && StringUtils.isNotBlank(header.getBusinessPhone())) { + vo.setBusinessPhone(header.getBusinessPhone()); + update.setBusinessPhone(header.getBusinessPhone()); + changed = true; + } + if (vo.getDeliveryCycle() == null && header.getDeliveryCycle() != null) { + vo.setDeliveryCycle(header.getDeliveryCycle()); + update.setDeliveryCycle(header.getDeliveryCycle()); + changed = true; + } + if (StringUtils.isBlank(vo.getProductType()) && StringUtils.isNotBlank(header.getProductType())) { + vo.setProductType(header.getProductType()); + update.setProductType(header.getProductType()); + changed = true; + } + if (StringUtils.isBlank(vo.getUsePurpose()) && StringUtils.isNotBlank(header.getUsePurpose())) { + vo.setUsePurpose(header.getUsePurpose()); + update.setUsePurpose(header.getUsePurpose()); + changed = true; + } + if (StringUtils.isBlank(vo.getThicknessTolerance()) && StringUtils.isNotBlank(header.getThicknessTolerance())) { + vo.setThicknessTolerance(header.getThicknessTolerance()); + update.setThicknessTolerance(header.getThicknessTolerance()); + changed = true; + } + if (StringUtils.isBlank(vo.getWidthTolerance()) && StringUtils.isNotBlank(header.getWidthTolerance())) { + vo.setWidthTolerance(header.getWidthTolerance()); + update.setWidthTolerance(header.getWidthTolerance()); + changed = true; + } + if (StringUtils.isBlank(vo.getSurfaceQuality()) && StringUtils.isNotBlank(header.getSurfaceQuality())) { + vo.setSurfaceQuality(header.getSurfaceQuality()); + update.setSurfaceQuality(header.getSurfaceQuality()); + changed = true; + } + if (StringUtils.isBlank(vo.getSurfaceTreatment()) && StringUtils.isNotBlank(header.getSurfaceTreatment())) { + vo.setSurfaceTreatment(header.getSurfaceTreatment()); + update.setSurfaceTreatment(header.getSurfaceTreatment()); + changed = true; + } + if (StringUtils.isBlank(vo.getInnerDiameter()) && StringUtils.isNotBlank(header.getInnerDiameter())) { + vo.setInnerDiameter(header.getInnerDiameter()); + update.setInnerDiameter(header.getInnerDiameter()); + changed = true; + } + if (StringUtils.isBlank(vo.getOuterDiameter()) && StringUtils.isNotBlank(header.getOuterDiameter())) { + vo.setOuterDiameter(header.getOuterDiameter()); + update.setOuterDiameter(header.getOuterDiameter()); + changed = true; + } + if (StringUtils.isBlank(vo.getPackReq()) && StringUtils.isNotBlank(header.getPackReq())) { + vo.setPackReq(header.getPackReq()); + update.setPackReq(header.getPackReq()); + changed = true; + } + if (StringUtils.isBlank(vo.getCutEdgeReq()) && StringUtils.isNotBlank(header.getCutEdgeReq())) { + vo.setCutEdgeReq(header.getCutEdgeReq()); + update.setCutEdgeReq(header.getCutEdgeReq()); + changed = true; + } + if (StringUtils.isBlank(vo.getSingleCoilWeight()) && StringUtils.isNotBlank(header.getSingleCoilWeight())) { + vo.setSingleCoilWeight(header.getSingleCoilWeight()); + update.setSingleCoilWeight(header.getSingleCoilWeight()); + changed = true; + } + if (StringUtils.isBlank(vo.getWeightDeviation()) && StringUtils.isNotBlank(header.getWeightDeviation())) { + vo.setWeightDeviation(header.getWeightDeviation()); + update.setWeightDeviation(header.getWeightDeviation()); + changed = true; + } + if (StringUtils.isBlank(vo.getOtherTechReq()) && StringUtils.isNotBlank(header.getOtherTechReq())) { + vo.setOtherTechReq(header.getOtherTechReq()); + update.setOtherTechReq(header.getOtherTechReq()); + changed = true; + } + if (StringUtils.isBlank(vo.getPaymentDesc()) && StringUtils.isNotBlank(header.getPaymentDesc())) { + vo.setPaymentDesc(header.getPaymentDesc()); + update.setPaymentDesc(header.getPaymentDesc()); + changed = true; + } + if (StringUtils.isBlank(vo.getRemark()) && StringUtils.isNotBlank(header.getRemark())) { + vo.setRemark(header.getRemark()); + update.setRemark(header.getRemark()); + changed = true; + } + + if (changed) { + baseMapper.updateById(update); + } + } + } + /** * 新增排产单主加明细可合并 */ @@ -504,6 +657,22 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi return vo; } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean saveSort(SchProdScheduleItemSortBo sortBo) { + List scheduleIds = sortBo.getScheduleIds(); + for (int i = 0; i < scheduleIds.size(); i++) { + Long id = scheduleIds.get(i); + baseMapper.update( + null, + Wrappers.lambdaUpdate() + .set(SchProdScheduleItem::getSortNo, i + 1) + .eq(SchProdScheduleItem::getScheduleId, id) + ); + } + return true; + } + /** * 反射获取字段值(用于动态字段比较 — SchProdSchedule header) */ diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml index b63fb9c33..6131a8fb4 100644 --- a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml +++ b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml @@ -33,6 +33,7 @@ + diff --git a/klp-ui/src/api/aps/schedule.js b/klp-ui/src/api/aps/schedule.js index 71056bdf5..7b375a690 100644 --- a/klp-ui/src/api/aps/schedule.js +++ b/klp-ui/src/api/aps/schedule.js @@ -99,3 +99,11 @@ export function mergeScheduleItem(data) { data }) } + +export function saveScheduleItemSort(data) { + return request({ + url: '/flow/prodScheduleItem/sort', + method: 'post', + data + }) +} diff --git a/klp-ui/src/views/wms/post/aps/orderTrack.vue b/klp-ui/src/views/wms/post/aps/orderTrack.vue index 3942bc3f5..e9ff89e02 100644 --- a/klp-ui/src/views/wms/post/aps/orderTrack.vue +++ b/klp-ui/src/views/wms/post/aps/orderTrack.vue @@ -32,6 +32,22 @@ +
+ 绑定日期: + +
@@ -209,6 +225,29 @@ export default { batchTargetContractId: '', batchTransferCoilIds: [], batchTransferLoading: false, + bindDateRange: [], + bindDatePickerOptions: { + shortcuts: [ + { + text: '今天', + onClick(picker) { + const today = new Date() + const start = new Date(today.getFullYear(), today.getMonth(), today.getDate()) + const end = new Date(today.getFullYear(), today.getMonth(), today.getDate()) + picker.$emit('pick', [start, end]) + } + }, + { + text: '最近7天', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setDate(start.getDate() - 6) + picker.$emit('pick', [start, end]) + } + } + ] + }, queryParams: { keyword: '', orderCode: '', @@ -218,6 +257,9 @@ export default { signDateEnd: undefined, deliveryDateStart: undefined, deliveryDateEnd: undefined, + bindDateStart: undefined, + bindDateEnd: undefined, + onlyBoundSchedule: true, pageNum: 1, pageSize: 10 } @@ -249,9 +291,35 @@ export default { } }, created() { + this.initBindDateRange() this.getList() }, methods: { + formatDate(date) { + if (!date) return '' + const y = date.getFullYear() + const m = String(date.getMonth() + 1).padStart(2, '0') + const d = String(date.getDate()).padStart(2, '0') + return `${y}-${m}-${d}` + }, + initBindDateRange() { + const end = new Date() + const start = new Date() + start.setDate(start.getDate() - 6) + this.bindDateRange = [this.formatDate(start), this.formatDate(end)] + }, + syncBindQueryParams() { + const range = this.bindDateRange || [] + if (Array.isArray(range) && range.length === 2 && range[0] && range[1]) { + this.queryParams.bindDateStart = range[0] + this.queryParams.bindDateEnd = range[1] + this.queryParams.onlyBoundSchedule = true + return + } + this.queryParams.bindDateStart = undefined + this.queryParams.bindDateEnd = undefined + this.queryParams.onlyBoundSchedule = false + }, toggleMoreFilter() { this.showMoreFilter = !this.showMoreFilter }, @@ -267,9 +335,11 @@ export default { this.queryParams.signDateEnd = undefined this.queryParams.deliveryDateStart = undefined this.queryParams.deliveryDateEnd = undefined + this.initBindDateRange() this.handleSearch() }, getList() { + this.syncBindQueryParams() this.orderLoading = true listCrmOrder(this.queryParams).then(res => { this.orderList = res.rows || [] diff --git a/klp-ui/src/views/wms/post/aps/schedule.vue b/klp-ui/src/views/wms/post/aps/schedule.vue index b1784e73e..a0f9a42a8 100644 --- a/klp-ui/src/views/wms/post/aps/schedule.vue +++ b/klp-ui/src/views/wms/post/aps/schedule.vue @@ -44,21 +44,29 @@
- 接收 - 驳回 + 接收 + 驳回
+ + + + + + + + + + - - - - - - + + - - - - - + - - @@ -99,8 +99,6 @@ - - @@ -111,22 +109,24 @@ - - - - - - - - + + - + + + + + + + + + - +
排产单号 {{ sch.scheduleNo }} 生产日期 {{ sch.prodDate }}
排产状态 {{ statusMap[sch.scheduleStatus] || '未知' }} @@ -67,28 +75,20 @@ {{ sch.businessUser }}
联系电话{{ sch.businessPhone }} 订货单位 {{ sch.customerName }}
联系电话{{ sch.businessPhone }} 交货期(天) {{ sch.deliveryCycle }}产品用途{{ sch.usePurpose }}
品名{{ sch.productType }}{{ sch.productType }}
厚度公差 {{ sch.thicknessTolerance }} 宽度公差 {{ sch.widthTolerance }}
表面质量 {{ sch.surfaceQuality }} 表面处理{{ sch.innerDiameter }} 外径要求 {{ sch.outerDiameter }}
包装要求 {{ sch.packReq }} 切边要求{{ sch.singleCoilWeight }} 交货重量偏差 {{ sch.weightDeviation }}
其他技术要求{{ sch.otherTechReq }}
付款情况说明{{ sch.paymentDesc }}产品用途{{ sch.usePurpose || '-' }}
备注{{ sch.remark }}{{ sch.remark || '-' }}
其他技术要求{{ sch.otherTechReq }}
付款情况说明{{ sch.paymentDesc }}
驳回原因{{ sch.returnReason }}{{ sch.returnReason }}
@@ -156,7 +156,7 @@
暂无明细
-
+
{{ hasQueried ? '该日期暂无待审核产需单' : '请选择日期查询' }}
@@ -184,53 +184,78 @@ + + + + + + + + + + - - + + + + + + + + - - + + + + + + + + - - + + + + + + + + - + + + + + + + + - + + + + + + - - - - - - - - - - - - - - - - - - + + - + + - - - - + +
排产单号{{ sch.scheduleNo }}生产日期{{ sch.prodDate }}排产单号{{ sch.scheduleNo }}生产日期{{ sch.prodDate }}排产状态 + 已接收 + 业务员{{ sch.businessUser }}
业务员{{ sch.businessUser }}联系电话{{ sch.businessPhone }}订货单位{{ sch.customerName }}联系电话{{ sch.businessPhone }}交货期(天){{ sch.deliveryCycle }}品名{{ sch.productType }}
订货单位{{ sch.customerName }}交货期(天){{ sch.deliveryCycle }}厚度公差{{ sch.thicknessTolerance }}宽度公差{{ sch.widthTolerance }}表面质量{{ sch.surfaceQuality }}表面处理{{ sch.surfaceTreatment }}
品名{{ sch.productType }}内径尺寸{{ sch.innerDiameter }}外径要求{{ sch.outerDiameter }}包装要求{{ sch.packReq }}切边要求{{ sch.cutEdgeReq }}
产品用途{{ sch.usePurpose }}单件重量{{ sch.singleCoilWeight }}交货重量偏差{{ sch.weightDeviation }}产品用途{{ sch.usePurpose || '-' }}
厚度公差{{ sch.thicknessTolerance }}宽度公差{{ sch.widthTolerance }}
表面质量{{ sch.surfaceQuality }}表面处理{{ sch.surfaceTreatment }}
内径尺寸{{ sch.innerDiameter }}外径要求{{ sch.outerDiameter }}
包装要求{{ sch.packReq }}切边要求{{ sch.cutEdgeReq }}
单件重量{{ sch.singleCoilWeight }}交货重量偏差{{ sch.weightDeviation }}备注{{ sch.remark || '-' }}
其他技术要求{{ sch.otherTechReq }}其他技术要求{{ sch.otherTechReq }}
付款情况说明{{ sch.paymentDesc }}
备注{{ sch.remark }}付款情况说明{{ sch.paymentDesc }}
@@ -254,7 +279,7 @@
暂无明细
-
+
{{ hasQueried ? '该日期暂无已接收产需单' : '请选择日期查询' }}
@@ -284,64 +309,66 @@ {{ tab }} {{ scheduledItemList.filter(i => normalizeStepName(i.stepName) === tab).length }} +
+ 保存排序 +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+
+
生产日期{{ row.prodDate }}
+
规格{{ row.spec }}
+
材质{{ row.material }}
+
排产吨数{{ row.scheduleWeight }}
+
品名项{{ row.productItem }}
+
品名{{ row.productType }}
+
订货单位{{ row.customerName }}
+
业务员{{ row.businessUser }}
+
联系电话{{ row.businessPhone }}
+
交货期(天){{ row.deliveryCycle }}
+
厚度公差{{ row.thicknessTolerance }}
+
宽度公差{{ row.widthTolerance }}
+
表面质量{{ row.surfaceQuality }}
+
表面处理{{ row.surfaceTreatment }}
+
内径尺寸{{ row.innerDiameter }}
+
外径要求{{ row.outerDiameter }}
+
包装要求{{ row.packReq }}
+
切边要求{{ row.cutEdgeReq }}
+
单件重量{{ row.singleCoilWeight }}
+
交货重量偏差{{ row.weightDeviation }}
+
产品用途{{ row.usePurpose }}
+
其他技术要求{{ row.otherTechReq }}
+
付款情况说明{{ row.paymentDesc }}
+
单行排产备注{{ row.rowRemark }}
+
备注{{ row.remark }}
+
+
+ + +
{{ hasQueried ? '该日期暂无已排产数据' : '请选择日期查询' }} @@ -599,7 +626,7 @@
请为每条明细配置工序,所有明细配置完成后才能接收。
- + @@ -607,8 +634,8 @@