|
|
|
@ -4,7 +4,7 @@ |
|
|
|
<div class="header-bar"> |
|
|
|
<div class="header-left" @click="$router.back()"> |
|
|
|
<i class="el-icon-arrow-left"></i> |
|
|
|
<span>生产退料</span> |
|
|
|
<span>直接退料</span> |
|
|
|
</div> |
|
|
|
<div class="header-right" @click="$router.push({ path: '/' })"> |
|
|
|
首页 |
|
|
|
@ -24,7 +24,7 @@ |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 工单信息卡片列表 --> |
|
|
|
<div class="work-order-list" v-if="workOrderList.length > 0"> |
|
|
|
<!-- <div class="work-order-list" v-if="workOrderList.length > 0"> |
|
|
|
<div |
|
|
|
v-for="(workOrder, index) in workOrderList" |
|
|
|
:key="index" |
|
|
|
@ -38,8 +38,6 @@ |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="title-value">{{ workOrder.partNo }}</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 物料描述单独一行 --> |
|
|
|
<div class="part-desc-row"> |
|
|
|
<span class="desc-text">{{ workOrder.partDesc }}</span> |
|
|
|
</div> |
|
|
|
@ -59,7 +57,7 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> --> |
|
|
|
|
|
|
|
<!-- 材料列表(新增,仿 directIssue.vue) --> |
|
|
|
<div |
|
|
|
@ -72,10 +70,14 @@ |
|
|
|
class="material-card" |
|
|
|
@click="openIssueList(material)" |
|
|
|
> |
|
|
|
<div class="card-title"> |
|
|
|
<span class="title-label">工单号:{{ material.orderNo }}</span> |
|
|
|
|
|
|
|
</div> |
|
|
|
<div class="card-title"> |
|
|
|
<span class="title-label" |
|
|
|
>物料编码:{{ material.componentPartNo }} 行号:{{ |
|
|
|
material.lineNo || index + 1 |
|
|
|
material.lineItemNo |
|
|
|
}}</span |
|
|
|
> |
|
|
|
</div> |
|
|
|
@ -121,7 +123,7 @@ |
|
|
|
|
|
|
|
<script> |
|
|
|
import { getWorkOrderMaterials } from '@/api/production/production-issue'; |
|
|
|
import { getReturnWorkOrderInfo,getIssueForShopOrder } from '@/api/production/production-return'; |
|
|
|
import { getReturnWorkOrderInfo } from '@/api/production/production-return'; |
|
|
|
import moment from 'moment'; |
|
|
|
|
|
|
|
export default { |
|
|
|
@ -139,6 +141,37 @@ export default { |
|
|
|
formatDate(date) { |
|
|
|
return date ? moment(date).format('YYYY-MM-DD') : ''; |
|
|
|
}, |
|
|
|
// 保存页面状态到sessionStorage(仅用于从领料记录页返回时恢复) |
|
|
|
savePageStateForIssueList() { |
|
|
|
const state = { |
|
|
|
workOrderNo: this.workOrderNo, |
|
|
|
workOrderList: this.workOrderList, |
|
|
|
selectedWorkOrder: this.selectedWorkOrder, |
|
|
|
materialList: this.materialList, |
|
|
|
}; |
|
|
|
sessionStorage.setItem('productionReturnPicking_state_fromIssueList', JSON.stringify(state)); |
|
|
|
}, |
|
|
|
// 从sessionStorage恢复页面状态(仅当从领料记录页返回时) |
|
|
|
restorePageStateFromIssueList() { |
|
|
|
try { |
|
|
|
const shouldRestore = sessionStorage.getItem('productionReturnPicking_shouldRestore'); |
|
|
|
const savedState = sessionStorage.getItem('productionReturnPicking_state_fromIssueList'); |
|
|
|
if (shouldRestore === 'true' && savedState) { |
|
|
|
const state = JSON.parse(savedState); |
|
|
|
this.workOrderNo = state.workOrderNo || ""; |
|
|
|
this.workOrderList = state.workOrderList || []; |
|
|
|
this.selectedWorkOrder = state.selectedWorkOrder || null; |
|
|
|
this.materialList = state.materialList || []; |
|
|
|
// 清除标记 |
|
|
|
sessionStorage.removeItem('productionReturnPicking_shouldRestore'); |
|
|
|
sessionStorage.removeItem('productionReturnPicking_state_fromIssueList'); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
// 清理潜在的异常数据 |
|
|
|
sessionStorage.removeItem('productionReturnPicking_shouldRestore'); |
|
|
|
sessionStorage.removeItem('productionReturnPicking_state_fromIssueList'); |
|
|
|
} |
|
|
|
}, |
|
|
|
// 查询工单信息 |
|
|
|
handleSearchWorkOrder() { |
|
|
|
if (!this.workOrderNo.trim()) { |
|
|
|
@ -161,11 +194,14 @@ export default { |
|
|
|
data.workOrders.length > 0 && |
|
|
|
data.code === 0 |
|
|
|
) { |
|
|
|
this.workOrderList = data.workOrders; |
|
|
|
this.selectedWorkOrder = null; |
|
|
|
// 直接选择返回的工单(通常是唯一的),并加载材料清单 |
|
|
|
const firstWorkOrder = data.workOrders[0]; |
|
|
|
this.selectedWorkOrder = firstWorkOrder; |
|
|
|
this.workOrderList = []; |
|
|
|
this.materialList = []; |
|
|
|
this.loadMaterialList(); |
|
|
|
} else { |
|
|
|
this.$message.error("未找到该工单信息"); |
|
|
|
this.$message.error(data.msg); |
|
|
|
this.workOrderList = []; |
|
|
|
this.selectedWorkOrder = null; |
|
|
|
this.materialList = []; |
|
|
|
@ -173,8 +209,7 @@ export default { |
|
|
|
}) |
|
|
|
.catch((error) => { |
|
|
|
this.loading = false; |
|
|
|
console.error("查询工单信息失败:", error); |
|
|
|
this.$message.error("查询工单信息失败"); |
|
|
|
this.$message.error(error.msg); |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
@ -216,11 +251,15 @@ export default { |
|
|
|
|
|
|
|
// 打开领料记录列表(新页面) |
|
|
|
openIssueList(material) { |
|
|
|
// 跳转前保存当前页面状态(用于从领料记录返回时恢复) |
|
|
|
this.savePageStateForIssueList(); |
|
|
|
this.$router.push({ |
|
|
|
name: 'productionReturnIssueList', |
|
|
|
params: { |
|
|
|
query: { |
|
|
|
workOrderNo: this.selectedWorkOrder.orderNo, |
|
|
|
partNo: material.componentPartNo, |
|
|
|
componentPartNo: material.componentPartNo, |
|
|
|
componentPartDesc: material.componentPartDesc, |
|
|
|
lineItemNo: material.lineItemNo, |
|
|
|
}, |
|
|
|
}); |
|
|
|
}, |
|
|
|
@ -228,6 +267,8 @@ export default { |
|
|
|
}, |
|
|
|
|
|
|
|
mounted() { |
|
|
|
// 如果是从领料记录返回,则恢复页面状态 |
|
|
|
this.restorePageStateFromIssueList(); |
|
|
|
// 聚焦工单号输入框 |
|
|
|
this.$nextTick(() => { |
|
|
|
if (this.$refs.workOrderInput) { |
|
|
|
|