|
|
|
@ -11,15 +11,31 @@ |
|
|
|
|
|
|
|
<!-- 搜索框 --> |
|
|
|
<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="scrollable-content"> |
|
|
|
@ -66,24 +82,37 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 退料标签列表 --> |
|
|
|
<div class="label-list"> |
|
|
|
<div class="list-header"> |
|
|
|
<div class="col-no">NO.</div> |
|
|
|
<div class="col-label">标签条码</div> |
|
|
|
<div class="col-part">物料编码</div> |
|
|
|
<div class="col-qty">高度</div> |
|
|
|
<div class="col-qty">标签数量</div> |
|
|
|
<!-- 退料标签列表 - 参考发料标签卡片样式 --> |
|
|
|
<div class="label-card-container"> |
|
|
|
<div |
|
|
|
v-for="(label, index) in labelList" |
|
|
|
:key="label.id || index" |
|
|
|
class="label-card" |
|
|
|
> |
|
|
|
<div class="card-edit-icon" @click.stop="openEditDialog(label, index)"> |
|
|
|
<i class="el-icon-edit"></i> |
|
|
|
</div> |
|
|
|
<div class="card-content" @click="openEditDialog(label, index)"> |
|
|
|
<div class="card-row"> |
|
|
|
<span class="card-label">标签号:</span> |
|
|
|
<span class="card-value">{{ label.labelCode }}</span> |
|
|
|
</div> |
|
|
|
<div class="card-row"> |
|
|
|
<span class="card-label">物料号:</span> |
|
|
|
<span class="card-value">{{ label.partNo || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="card-row"> |
|
|
|
<span class="card-label">库位号:</span> |
|
|
|
<span class="card-value">{{ label.locationId || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="card-row"> |
|
|
|
<span class="card-label">高度:</span> |
|
|
|
<span class="card-value">{{ label.height || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="card-row"> |
|
|
|
<span class="card-label">退料数量:</span> |
|
|
|
<span class="card-value highlight">{{ label.quantity || 0 }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div v-for="(label, index) in labelList" :key="index" class="list-item"> |
|
|
|
<div class="col-no">{{ index+1 }}</div> |
|
|
|
<div class="col-label">{{ label.labelCode }}</div> |
|
|
|
<div class="col-part">{{ label.partNo }}</div> |
|
|
|
<div class="col-batch">{{ 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> |
|
|
|
|
|
|
|
@ -319,6 +348,7 @@ export default { |
|
|
|
sequenceNo: '', |
|
|
|
wdrNo: '', |
|
|
|
engChgLevel: '', |
|
|
|
enablePrint: true, // 是否打印标签,默认勾选 |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
@ -644,6 +674,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'), |
|
|
|
@ -681,7 +718,8 @@ 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() |
|
|
|
@ -919,6 +957,7 @@ export default { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
gap: 12px; |
|
|
|
flex-wrap: wrap; |
|
|
|
} |
|
|
|
|
|
|
|
.search-container .el-input { |
|
|
|
@ -946,6 +985,14 @@ export default { |
|
|
|
transform: scale(0.98); |
|
|
|
} |
|
|
|
|
|
|
|
/* 打印勾选 */ |
|
|
|
.print-checkbox { |
|
|
|
font-size: 12px; |
|
|
|
color: #606266; |
|
|
|
width: 100%; |
|
|
|
margin-top: 4px; |
|
|
|
} |
|
|
|
|
|
|
|
.manual-btn { |
|
|
|
|
|
|
|
border: 1px solid #1abc4a; |
|
|
|
@ -1210,96 +1257,100 @@ export default { |
|
|
|
color: #0d8f7f; |
|
|
|
} |
|
|
|
|
|
|
|
/* 标签列表 */ |
|
|
|
.label-list { |
|
|
|
background: white; |
|
|
|
margin: 0 10px 12px; |
|
|
|
border-radius: 0 0 8px 8px; |
|
|
|
overflow: hidden; |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
/* 标签列表 - 卡片容器(参考客户发料) */ |
|
|
|
.label-card-container { |
|
|
|
padding: 0 8px 8px; |
|
|
|
background: #f5f5f5; |
|
|
|
} |
|
|
|
|
|
|
|
.list-header { |
|
|
|
display: flex; |
|
|
|
background: #f8f9fa; |
|
|
|
padding: 12px 8px; |
|
|
|
border-bottom: 1px solid #e0e0e0; |
|
|
|
font-size: 12px; |
|
|
|
color: #666; |
|
|
|
font-weight: 500; |
|
|
|
position: sticky; |
|
|
|
top: 0; |
|
|
|
z-index: 1; |
|
|
|
/* 标签卡片 - 更紧凑样式 */ |
|
|
|
.label-card { |
|
|
|
background: white; |
|
|
|
border-radius: 4px; |
|
|
|
margin-bottom: 6px; |
|
|
|
padding: 6px 8px; |
|
|
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08); |
|
|
|
border: 1px solid #e0e0e0; |
|
|
|
cursor: pointer; |
|
|
|
transition: all 0.2s ease; |
|
|
|
position: relative; |
|
|
|
} |
|
|
|
|
|
|
|
.list-item { |
|
|
|
display: flex; |
|
|
|
padding: 12px 8px; |
|
|
|
border-bottom: 1px solid #f0f0f0; |
|
|
|
font-size: 12px; |
|
|
|
color: #333; |
|
|
|
align-items: flex-start; |
|
|
|
min-height: 40px; |
|
|
|
.label-card:hover { |
|
|
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12); |
|
|
|
border-color: #17b3a3; |
|
|
|
} |
|
|
|
|
|
|
|
.list-item:last-child { |
|
|
|
border-bottom: none; |
|
|
|
.label-card:active { |
|
|
|
transform: scale(0.98); |
|
|
|
} |
|
|
|
|
|
|
|
.col-no { |
|
|
|
/* 编辑图标 - 右上角 */ |
|
|
|
.card-edit-icon { |
|
|
|
position: absolute; |
|
|
|
top: 6px; |
|
|
|
right: 6px; |
|
|
|
width: 20px; |
|
|
|
text-align: center; |
|
|
|
height: 20px; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
background: #f0f0f0; |
|
|
|
border-radius: 3px; |
|
|
|
cursor: pointer; |
|
|
|
transition: all 0.2s ease; |
|
|
|
z-index: 10; |
|
|
|
} |
|
|
|
|
|
|
|
.col-label { |
|
|
|
flex: 1.5; |
|
|
|
text-align: center; |
|
|
|
word-break: break-all; |
|
|
|
white-space: normal; |
|
|
|
line-height: 1.2; |
|
|
|
.card-edit-icon:hover { |
|
|
|
background: #17b3a3; |
|
|
|
color: white; |
|
|
|
} |
|
|
|
|
|
|
|
.col-part { |
|
|
|
flex: 1.5; |
|
|
|
text-align: center; |
|
|
|
.card-edit-icon i { |
|
|
|
font-size: 12px; |
|
|
|
color: #17b3a3; |
|
|
|
} |
|
|
|
|
|
|
|
.col-batch { |
|
|
|
flex: 1.5; |
|
|
|
text-align: center; |
|
|
|
.card-edit-icon:hover i { |
|
|
|
color: white; |
|
|
|
} |
|
|
|
|
|
|
|
.col-qty { |
|
|
|
width: 80px; |
|
|
|
text-align: center; |
|
|
|
cursor: pointer; |
|
|
|
position: relative; |
|
|
|
/* 卡片内容 */ |
|
|
|
.card-content { |
|
|
|
padding-right: 28px; |
|
|
|
} |
|
|
|
|
|
|
|
.card-row { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
gap: 4px; |
|
|
|
font-size: 11px; |
|
|
|
line-height: 1.5; |
|
|
|
margin-bottom: 3px; |
|
|
|
} |
|
|
|
|
|
|
|
.quantity-display { |
|
|
|
font-size: 12px; |
|
|
|
color: #333; |
|
|
|
.card-row:last-child { |
|
|
|
margin-bottom: 0; |
|
|
|
} |
|
|
|
|
|
|
|
.edit-icon { |
|
|
|
font-size: 12px; |
|
|
|
color: #17b3a3; |
|
|
|
opacity: 0.7; |
|
|
|
transition: opacity 0.2s ease; |
|
|
|
.card-label { |
|
|
|
color: #666; |
|
|
|
min-width: 65px; |
|
|
|
flex-shrink: 0; |
|
|
|
font-size: 11px; |
|
|
|
} |
|
|
|
|
|
|
|
.col-qty:hover .edit-icon { |
|
|
|
opacity: 1; |
|
|
|
.card-value { |
|
|
|
color: #333; |
|
|
|
flex: 1; |
|
|
|
word-break: break-all; |
|
|
|
font-size: 11px; |
|
|
|
} |
|
|
|
|
|
|
|
.col-qty:hover { |
|
|
|
background-color: #f0fffe; |
|
|
|
border-radius: 4px; |
|
|
|
.card-value.highlight { |
|
|
|
color: #17b3a3; |
|
|
|
font-weight: bold; |
|
|
|
font-size: 12px; |
|
|
|
} |
|
|
|
|
|
|
|
.empty-labels { |
|
|
|
|