|
|
|
@ -11,113 +11,132 @@ |
|
|
|
|
|
|
|
<!-- 搜索框 --> |
|
|
|
<div class="search-container"> |
|
|
|
<el-input clearable class="compact-input" v-model="scanCode" placeholder="请扫描物料标签" prefix-icon="el-icon-search" |
|
|
|
@keyup.enter.native="handleScan" ref="scanInput" /> |
|
|
|
<el-input |
|
|
|
clearable |
|
|
|
class="compact-input" |
|
|
|
v-model="scanCode" |
|
|
|
placeholder="请扫描物料标签" |
|
|
|
prefix-icon="el-icon-search" |
|
|
|
@keyup.enter.native="handleScan" |
|
|
|
ref="scanInput" |
|
|
|
/> |
|
|
|
<div class="mode-switch"> |
|
|
|
<el-switch class="custom-switch" v-model="isRemoveMode" active-color="#ff4949" inactive-color="#13ce66"> |
|
|
|
<el-switch |
|
|
|
class="custom-switch" |
|
|
|
v-model="isRemoveMode" |
|
|
|
active-color="#ff4949" |
|
|
|
inactive-color="#13ce66" |
|
|
|
> |
|
|
|
</el-switch> |
|
|
|
<span v-if="isRemoveMode" class="switch-text">{{ "移除" }}</span> |
|
|
|
<span v-else class="switch-text2">{{ "添加" }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="print-checkbox"> |
|
|
|
<el-button class="new-label-btn" @click="openNewLabelDialog">新标签</el-button> |
|
|
|
<el-checkbox v-model="enablePrint">打印标签</el-checkbox> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 订单信息卡片(对齐直接领料明细样式) --> |
|
|
|
<div class="work-order-list" v-if="orderInfo.orderNo"> |
|
|
|
<div class="work-order-card"> |
|
|
|
<div class="card-title"> |
|
|
|
<span class="title-label">{{ |
|
|
|
orderInfo.type === "workOrder" ? "工单号" : "退料申请单号" |
|
|
|
}}:{{ orderInfo.orderNo }} 批次号:{{ batchNo }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 关联信息单独一行 --> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ orderInfo.type === "workOrder" ? "关联单号" : "关联工单" }}:{{ |
|
|
|
orderInfo.transactionId |
|
|
|
}} 申请单退量:{{unissureQty}}</span> |
|
|
|
</div> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ orderInfo.partNo }}</span> |
|
|
|
</div> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ orderInfo.description }}</span> |
|
|
|
</div> |
|
|
|
<!-- 中间内容滚动区域:订单卡片 + 标题 + 标签列表 --> |
|
|
|
<div class="scrollable-content"> |
|
|
|
<!-- 订单信息卡片(对齐直接领料明细样式) --> |
|
|
|
<div class="work-order-list" v-if="orderInfo.orderNo"> |
|
|
|
<div class="work-order-card"> |
|
|
|
<div class="card-title"> |
|
|
|
<span class="title-label">{{ |
|
|
|
orderInfo.type === "workOrder" ? "工单号" : "退料申请单号" |
|
|
|
}}:{{ orderInfo.orderNo }} 批次号:{{ batchNo }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="card-details"> |
|
|
|
<div class="detail-item"> |
|
|
|
<div class="detail-label">已退数量</div> |
|
|
|
<div class="detail-value">{{ qtyReversed }}</div> |
|
|
|
<!-- 关联信息单独一行 --> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ orderInfo.type === "workOrder" ? "关联单号" : "关联工单" }}:{{ |
|
|
|
orderInfo.transactionId |
|
|
|
}} 申请单退量:{{unissureQty}}</span> |
|
|
|
</div> |
|
|
|
<div class="detail-item"> |
|
|
|
<div class="detail-label">领料数量</div> |
|
|
|
<div class="detail-value">{{ orderInfo.quantity }}</div> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ orderInfo.partNo }}</span> |
|
|
|
</div> |
|
|
|
<div class="detail-item"> |
|
|
|
<div class="detail-label">本次</div> |
|
|
|
<div class="detail-value">{{ totalScannedQty }}</div> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ orderInfo.description }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="card-details"> |
|
|
|
<div class="detail-item"> |
|
|
|
<div class="detail-label">已退数量</div> |
|
|
|
<div class="detail-value">{{ qtyReversed }}</div> |
|
|
|
</div> |
|
|
|
<div class="detail-item"> |
|
|
|
<div class="detail-label">领料数量</div> |
|
|
|
<div class="detail-value">{{ orderInfo.quantity }}</div> |
|
|
|
</div> |
|
|
|
<div class="detail-item"> |
|
|
|
<div class="detail-label">本次</div> |
|
|
|
<div class="detail-value">{{ totalScannedQty }}</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 退料信息确认标题 --> |
|
|
|
<div class="section-title"> |
|
|
|
<div class="title-left"> |
|
|
|
<i class="el-icon-circle-check"></i> |
|
|
|
<span>退料信息确认</span> |
|
|
|
<!-- 退料信息确认标题 --> |
|
|
|
<div class="section-title"> |
|
|
|
<div class="title-left"> |
|
|
|
<i class="el-icon-circle-check"></i> |
|
|
|
<span>退料信息确认</span> |
|
|
|
</div> |
|
|
|
<!-- <div class="title-right"> |
|
|
|
<span class="material-list-link" @click="showMaterialListDialog" |
|
|
|
>物料清单</span |
|
|
|
> |
|
|
|
</div> --> |
|
|
|
</div> |
|
|
|
<!-- <div class="title-right"> |
|
|
|
<span class="material-list-link" @click="showMaterialListDialog" |
|
|
|
>物料清单</span |
|
|
|
> |
|
|
|
</div> --> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 退料标签列表 --> |
|
|
|
<div class="label-list"> |
|
|
|
<div class="list-header"> |
|
|
|
<div class="col-no">NO.</div> |
|
|
|
<div class="col-label">物料标签</div> |
|
|
|
<!-- <div class="col-batch">批次号</div> --> |
|
|
|
<div class="col-part">库位</div> |
|
|
|
<div class="col-qty">高度</div> |
|
|
|
<div class="col-qty">退料数量</div> |
|
|
|
</div> |
|
|
|
<!-- 退料标签列表 --> |
|
|
|
<div class="label-list"> |
|
|
|
<div class="list-header"> |
|
|
|
<div class="col-no">NO.</div> |
|
|
|
<div class="col-label">物料标签</div> |
|
|
|
<!-- <div class="col-batch">批次号</div> --> |
|
|
|
<div class="col-part">库位</div> |
|
|
|
<div class="col-qty">高度</div> |
|
|
|
<div class="col-qty">退料数量</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div v-for="(label, index) in labelList" :key="label.id" class="list-item"> |
|
|
|
<div class="col-no">{{ index+1 }}</div> |
|
|
|
<div class="col-label">{{ label.labelCode }}</div> |
|
|
|
<!-- <div class="col-batch">{{ label.batchNo }}</div> --> |
|
|
|
<div class="col-part">{{ label.locationId }}</div> |
|
|
|
<div class="col-qty">{{ label.height }}</div> |
|
|
|
<div class="col-qty" @click="openEditDialog(label, index)"> |
|
|
|
<span class="quantity-display">{{ label.quantity }}</span> |
|
|
|
<i class="el-icon-edit edit-icon"></i> |
|
|
|
<div v-for="(label, index) in labelList" :key="label.id" class="list-item"> |
|
|
|
<div class="col-no">{{ index+1 }}</div> |
|
|
|
<div class="col-label">{{ label.labelCode }}</div> |
|
|
|
<!-- <div class="col-batch">{{ label.batchNo }}</div> --> |
|
|
|
<div class="col-part">{{ label.locationId }}</div> |
|
|
|
<div class="col-qty">{{ label.height }}</div> |
|
|
|
<div class="col-qty" @click="openEditDialog(label, index)"> |
|
|
|
<span class="quantity-display">{{ label.quantity }}</span> |
|
|
|
<i class="el-icon-edit edit-icon"></i> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 空状态 --> |
|
|
|
<div v-if="labelList.length === 0" class="empty-labels"> |
|
|
|
<p>暂无扫描标签</p> |
|
|
|
<!-- 空状态 --> |
|
|
|
<div v-if="labelList.length === 0" class="empty-labels"> |
|
|
|
<p>暂无扫描标签</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 退料原因选择 --> |
|
|
|
<!-- <div class="return-reason-section"> |
|
|
|
<div class="reason-title">退料原因</div> |
|
|
|
<el-select |
|
|
|
v-model="returnReason" |
|
|
|
placeholder="请选择退料原因" |
|
|
|
style="width: 100%" |
|
|
|
> |
|
|
|
<el-option label="质量问题" value="QUALITY_ISSUE"></el-option> |
|
|
|
<el-option label="超发退料" value="OVER_ISSUE"></el-option> |
|
|
|
<el-option label="错误物料" value="WRONG_MATERIAL"></el-option> |
|
|
|
<el-option label="生产变更" value="PRODUCTION_CHANGE"></el-option> |
|
|
|
<el-option label="其他原因" value="OTHER"></el-option> |
|
|
|
</el-select> |
|
|
|
</div> --> |
|
|
|
<!-- 退料原因选择(暂留,滚动区域内) --> |
|
|
|
<!-- <div class="return-reason-section"> |
|
|
|
<div class="reason-title">退料原因</div> |
|
|
|
<el-select |
|
|
|
v-model="returnReason" |
|
|
|
placeholder="请选择退料原因" |
|
|
|
style="width: 100%" |
|
|
|
> |
|
|
|
<el-option label="质量问题" value="QUALITY_ISSUE"></el-option> |
|
|
|
<el-option label="超发退料" value="OVER_ISSUE"></el-option> |
|
|
|
<el-option label="错误物料" value="WRONG_MATERIAL"></el-option> |
|
|
|
<el-option label="生产变更" value="PRODUCTION_CHANGE"></el-option> |
|
|
|
<el-option label="其他原因" value="OTHER"></el-option> |
|
|
|
</el-select> |
|
|
|
</div> --> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 底部操作按钮 --> |
|
|
|
<div class="bottom-actions"> |
|
|
|
@ -409,6 +428,7 @@ export default { |
|
|
|
lineItemNo:'', |
|
|
|
releaseNo:'', |
|
|
|
sequenceNo:'', |
|
|
|
enablePrint: true, // 是否打印标签,默认勾选 |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
@ -655,6 +675,13 @@ export default { |
|
|
|
this.$message.warning('扫描数量不能大于总领料数量和已退数量的差!') |
|
|
|
return |
|
|
|
} |
|
|
|
const hasNewPrint = this.labelList.some(item => { |
|
|
|
return typeof item !== null && item.newPrint === 'NEW'; |
|
|
|
}); |
|
|
|
if(hasNewPrint && !this.enablePrint){ |
|
|
|
this.$message.warning('存在新标签,需勾选打印标签选项!') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
const returnParams = { |
|
|
|
site: localStorage.getItem('site'), |
|
|
|
@ -690,7 +717,7 @@ export default { |
|
|
|
if (data.code === 0 && data) { |
|
|
|
this.$message.success('生产退料成功') |
|
|
|
const unitIds = data.unitIds || []; |
|
|
|
if (unitIds.length > 0) { |
|
|
|
if (this.enablePrint && unitIds.length > 0) { |
|
|
|
this.printViaServer(unitIds); |
|
|
|
} |
|
|
|
this.$router.back() |
|
|
|
@ -1015,6 +1042,13 @@ export default { |
|
|
|
background: #f5f5f5; |
|
|
|
} |
|
|
|
|
|
|
|
/* 中间内容滚动区域:订单卡片 + 标题 + 标签列表 */ |
|
|
|
.scrollable-content { |
|
|
|
flex: 1; |
|
|
|
overflow-y: auto; |
|
|
|
min-height: 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* 头部栏 */ |
|
|
|
.header-bar { |
|
|
|
display: flex; |
|
|
|
@ -1053,6 +1087,7 @@ export default { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
gap: 12px; |
|
|
|
flex-wrap: wrap; |
|
|
|
} |
|
|
|
|
|
|
|
.search-container .el-input { |
|
|
|
@ -1072,6 +1107,14 @@ export default { |
|
|
|
margin-left: auto; |
|
|
|
} |
|
|
|
|
|
|
|
/* 打印勾选 */ |
|
|
|
.print-checkbox { |
|
|
|
font-size: 12px; |
|
|
|
color: #606266; |
|
|
|
width: 100%; |
|
|
|
margin-top: 4px; |
|
|
|
} |
|
|
|
|
|
|
|
.new-label-btn:hover { |
|
|
|
background: #13998c; |
|
|
|
border-color: #13998c; |
|
|
|
@ -1326,8 +1369,6 @@ export default { |
|
|
|
margin: 0 10px 12px; |
|
|
|
border-radius: 0 0 8px 8px; |
|
|
|
overflow: hidden; |
|
|
|
max-height: 300px; |
|
|
|
overflow-y: auto; |
|
|
|
} |
|
|
|
|
|
|
|
.list-header { |
|
|
|
|