Browse Source

退料修改

master
shenzhouyu 1 month ago
parent
commit
e5047fedea
  1. 55
      src/views/modules/production-return/productionReturnPDAIssueList.vue
  2. 219
      src/views/modules/production-return/productionReturnPickingDetail.vue

55
src/views/modules/production-return/productionReturnPDAIssueList.vue

@ -11,17 +11,35 @@
<!-- 搜索框 -->
<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">
<!-- 订单信息卡片对齐直接领料明细样式 -->
<div class="work-order-list" v-if="orderInfo.orderNo">
<div class="work-order-card">
@ -103,7 +121,7 @@
</div>
</div>
<!-- 退料原因选择 -->
<!-- 退料原因选择暂留滚动区域内 -->
<!-- <div class="return-reason-section">
<div class="reason-title">退料原因</div>
<el-select
@ -118,6 +136,7 @@
<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 {

219
src/views/modules/production-return/productionReturnPickingDetail.vue

@ -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 {

Loading…
Cancel
Save