Browse Source

委外修改

master
shenzhouyu 7 months ago
parent
commit
458afc7fec
  1. 4
      src/api/outsourcing/outsourcing-issue.js
  2. 1
      src/api/outsourcing/outsourcing-return.js
  3. 4
      src/router/index.js
  4. 75
      src/views/modules/outsourcing-issue/outsourcingDirectIssue.vue
  5. 19
      src/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue
  6. 335
      src/views/modules/outsourcing-issue/outsourcingDirectIssueList.vue
  7. 140
      src/views/modules/outsourcing-return/index.vue
  8. 45
      src/views/modules/outsourcing-return/outsourcingReturnPDAIssueList.vue
  9. 10
      src/views/modules/outsourcing-return/outsourcingReturnPDAList.vue

4
src/api/outsourcing/outsourcing-issue.js

@ -3,6 +3,8 @@ import { createAPI } from "@/utils/httpRequest.js";
// 获取委外订单信息
export const getOutsourcingOrderInfo = data => createAPI(`/pda/outsourcing/issue/getOutsourcingOrderInfo`,'post',data)
export const getOutsourcingOrderLineInfo = data => createAPI(`/pda/outsourcing/issue/getOutsourcingOrderLineInfo`,'post',data)
// 获取委外订单物料列表
export const getOutsourcingMaterials = data => createAPI(`/pda/outsourcing/issue/getOutsourcingMaterials`,'post',data)
@ -13,4 +15,4 @@ export const scanOutsourcingMaterialLabel = data => createAPI(`/pda/outsourcing/
export const confirmOutsourcingDirectIssue = data => createAPI(`/pda/outsourcing/issue/confirmOutsourcingDirectIssue`,'post',data)
// 验证委外订单状态
export const validateOutsourcingOrder = data => createAPI(`/pda/outsourcing/issue/validateOutsourcingOrder`,'post',data)
export const validateOutsourcingOrder = data => createAPI(`/pda/outsourcing/issue/validateOutsourcingOrder`,'post',data)

1
src/api/outsourcing/outsourcing-return.js

@ -3,6 +3,7 @@ import { createAPI } from "@/utils/httpRequest.js";
// 搜索委外订单(用于退料)
export const searchOutsourcingOrdersForReturn = data => createAPI(`/pda/outsourcing/return/searchOutsourcingOrdersForReturn`,'post',data)
export const getOutsourcingReturnOrderLineInfo = data => createAPI(`/pda/outsourcing/return/getOutsourcingReturnOrderLineInfo`,'post',data)
// 获取委外订单发料记录
export const getUnissueMatericalForOutsourcingOrder = data => createAPI(`/pda/outsourcing/return/getUnissueMatericalForOutsourcingOrder`,'post',data)

4
src/router/index.js

@ -73,12 +73,14 @@ const globalRoutes = [
// 委外发料
{ path: "/outsource",name: "outsource", component: resolve => require(["@/views/modules/outsourcing-issue/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}},
{ path:"/outsourcingDirectIssue",name:"outsourcingDirectIssue",component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingDirectIssue.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}},
{ path:"/outsourcingDirectIssueList",name:"outsourcingDirectIssueList",component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingDirectIssueList.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}},
{ path:"/outsourcingDirectIssueDetail",name:"outsourcingDirectIssueDetail",component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}},
{ path: "/outsourcingPicking", name: "outsourcingPicking", component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingPicking.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } },
{ path: "/outsourcingPickingDetail/:outsourcingNo", name: "outsourcingPickingDetail", component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingPickingDetail.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } },
// 委外退料
{ path: "/outsourcingReturn", name: "outsourcingReturn", component: resolve => require(["@/views/modules/outsourcing-return/index.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } },
{ path: "/outsourcingReturnPDAList/:outsourcingOrderNo/:partNo/:unissureQty/:itemNo", name: "outsourcingReturnPDAList", component: resolve => require(["@/views/modules/outsourcing-return/outsourcingReturnPDAList.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } },
{ path: "/outsourcingReturnPDAList/:orderNo/:partNo/:unissureQty/:itemNo", name: "outsourcingReturnPDAList", component: resolve => require(["@/views/modules/outsourcing-return/outsourcingReturnPDAList.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } },
{ path: "/outsourcingReturnPDAIssueList/:outsourcingOrderNo/:material", name: "outsourcingReturnPDAIssueList", component: resolve => require(["@/views/modules/outsourcing-return/outsourcingReturnPDAIssueList.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } },
// 客户订单发货

75
src/views/modules/outsourcing-issue/outsourcingDirectIssue.vue

@ -30,26 +30,26 @@
@click="selectOrder(order)"
>
<div class="card-title">
<span class="title-label">委外订单号{{ order.poNumber }}</span>
<span class="title-label">委外订单号{{ order.orderNo }}</span>
<span class="title-value">{{ order.supplierName || order.supplierNo || '-' }}</span>
</div>
<div class="part-desc-row">
<span class="desc-text">申请单{{ order.requestNo || '-' }}</span>
</div>
<!-- <div class="part-desc-row">
<span class="desc-text">接收日期{{ order.receiptDate || '-' }}</span>
</div> -->
<div class="card-details">
<div class="detail-item">
<div class="detail-label">计划数量</div>
<div class="detail-value">{{ order.qty || 0 }}</div>
<div class="detail-label">接收日期</div>
<div class="detail-value">{{ order.receiptDate}}</div>
</div>
<div class="detail-item">
<div class="detail-label">已发数量</div>
<div class="detail-value">{{ order.recvQty || 0 }}</div>
<div class="detail-label">状态</div>
<div class="detail-value">{{ order.status}}</div>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ order.uom || '个' }}</div>
<div class="detail-label">采购人</div>
<div class="detail-value">{{ order.buyerCode }}</div>
</div>
</div>
</div>
@ -66,27 +66,27 @@
<div class="card-title">
<span class="title-label"
>物料编码{{ material.partNo }} &nbsp;&nbsp; 行号{{
material.lineNo || index + 1
material.lineNo
}}</span
>
</div>
<div class="part-desc-row">
<span class="desc-text">{{ material.partDesc || material.materialDesc }}</span>
<span class="desc-text">{{ material.description }}</span>
</div>
<div class="card-details">
<div class="detail-item">
<div class="detail-label">需求数量</div>
<div class="detail-value">{{ material.qty || material.requiredQty || 0 }}</div>
<div class="detail-label">采收数量</div>
<div class="detail-value">{{ material.purchaseQty || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">已发数量</div>
<div class="detail-value">{{ material.issuedQty || material.pickedQty || 0 }}</div>
<div class="detail-label">库存数量</div>
<div class="detail-value">{{ material.inventoryQty || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ material.uom || '个' }}</div>
<div class="detail-value">{{ material.inventoryUOM }}</div>
</div>
</div>
</div>
@ -107,6 +107,7 @@
</template>
<script>
import { getOutsourcingOrderLineInfo } from '@/api/outsourcing/outsourcing-issue.js'
import { getOutsourcingOrderInfo } from '@/api/outsourcing/outsourcing.js'
import moment from 'moment'
@ -133,21 +134,20 @@ export default {
this.loading = true
const params = {
site: this.$store.state.user.site,
poNumber: this.outsourcingNo.trim(),
outsourcingNo: this.outsourcingNo.trim(),
}
getOutsourcingOrderInfo(params)
.then(({ data }) => {
this.loading = false
if (data && data.code === 0) {
//
this.orderList = (data.rows || []).map((row) => ({
poNumber: row.poNumber || row.notifyNo,
requestNo: row.workOrderNo || row.relatedNo,
qty: row.qty,
recvQty: row.recvQty || 0,
uom: row.uom,
this.orderList = (data.orders || []).map((row) => ({
orderNo: row.orderNo,
supplierName: row.supplierName,
supplierNo: row.supplierNo,
status:row.status,
receiptDate:row.receiptDate,
buyerCode:row.buyerCode
}))
this.selectedOrder = null
this.materialList = []
@ -180,20 +180,12 @@ export default {
}
const params = {
site: this.$store.state.user.site,
poNumber: this.selectedOrder.poNumber,
outsourcingNo: this.selectedOrder.orderNo,
}
getOutsourcingOrderInfo(params)
getOutsourcingOrderLineInfo(params)
.then(({ data }) => {
if (data && data.code === 0) {
this.materialList = (data.rows || []).map((item, index) => ({
id: index + 1,
partNo: item.partNo || item.materialCode,
partDesc: item.partDesc || item.materialDesc,
qty: item.qty || item.requiredQty,
issuedQty: item.recvQty || item.pickedQty || 0,
uom: item.uom,
lineNo: item.lineNo || item.lineNum,
}))
this.materialList = data.orders
} else {
this.$message.error(data.msg || '获取材料清单失败')
this.materialList = []
@ -204,16 +196,17 @@ export default {
this.$message.error('获取材料清单失败')
})
},
//
//
selectMaterial(material) {
this.$router.push({
name: 'outsourcingDirectIssueDetail',
name: 'outsourcingDirectIssueList',
params: {
outsourcingNo: this.selectedOrder.poNumber,
outsourcingNo: this.selectedOrder.orderNo,
partNo: material.partNo,
partDesc: material.partDesc || '',
requiredQty: material.qty || 0,
issuedQty: material.issuedQty || 0,
outsourcingInfo:{
requiredQty: material.purchaseQty || 0,
}
},
})
},

19
src/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue

@ -236,10 +236,21 @@ export default {
initFromRoute() {
this.outsourcingNo = this.$route.params.outsourcingNo
this.componentPartNo = this.$route.params.partNo
this.componentPartDesc = this.$route.params.partDesc || ''
this.requiredQty = Number(this.$route.params.requiredQty || 0)
this.issuedQty = Number(this.$route.params.issuedQty || 0)
this.itemNo = this.$route.params.itemNo || ''
//
const issueRecord = this.$route.params.issueRecord
if (issueRecord) {
this.componentPartDesc = issueRecord.partDesc || ''
this.requiredQty = Number(issueRecord.requiredQty || this.$route.params.requiredQty || 0)
this.issuedQty = Number(issueRecord.issuedQty || 0)
this.itemNo = issueRecord.itemNo || ''
} else {
//
this.componentPartDesc = this.$route.params.partDesc || ''
this.requiredQty = Number(this.$route.params.requiredQty || 0)
this.issuedQty = Number(this.$route.params.issuedQty || 0)
this.itemNo = this.$route.params.itemNo || ''
}
},
},
mounted() {

335
src/views/modules/outsourcing-issue/outsourcingDirectIssueList.vue

@ -0,0 +1,335 @@
<template>
<div class="pda-container">
<!-- 头部栏 -->
<div class="header-bar">
<div class="header-left" @click="$router.back()">
<i class="el-icon-arrow-left"></i>
<span>委外直接发料</span>
</div>
<div class="header-right" @click="$router.push({ path: '/' })">首页</div>
</div>
<!-- 订单信息展示 -->
<div class="search-container">
<div class="card-title">
<label class="title-label">委外订单号:{{ outsourcingNo }}</label>
</div>
<div class="card-title">
<label class="title-label">物料编码:{{ partNo }}</label>
</div>
<div class="card-title">
<label class="title-label">需求数量:{{ requiredQty }}</label>
</div>
</div>
<div class="content-area">
<div class="work-order-list" v-if="issueList.length > 0">
<div
v-for="(item, index) in issueList"
:key="index"
class="material-card"
@click="goDetail(item)"
>
<div class="card-title">
<span class="title-label">
需求日期{{ item.dateRequired }} &nbsp;&nbsp; 行号{{ item.lineNo }}
</span>
</div>
<div class="part-desc-row">
<span class="desc-text">料号{{ item.componentPartNo }}</span>
</div>
<div class="part-desc-row">
<span class="desc-text">{{ item.componentPartDescription }}</span>
</div>
<div class="card-details">
<div class="detail-item">
<div class="detail-label">需求数量</div>
<div class="detail-value">{{ item.qtyRequired }}</div>
</div>
<div class="detail-item">
<div class="detail-label">已发数量</div>
<div class="detail-value">{{ item.qtyIssued || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ item.uom || '个' }}</div>
</div>
</div>
</div>
</div>
<div v-if="!loading && issueList.length === 0" class="empty-state">
<i class="el-icon-box"></i>
<p>暂无物料记录</p>
</div>
<div v-if="loading" class="loading-state">
<i class="el-icon-loading"></i>
<p>加载中...</p>
</div>
</div>
</div>
</template>
<script>
import { getOutsourcingMaterials } from '@/api/outsourcing/outsourcing-issue.js'
export default {
data() {
return {
outsourcingNo: '',
partNo: '',
requiredQty: 0,
loading: false,
issueList: [],
}
},
methods: {
async loadIssueList() {
if (!this.outsourcingNo || !this.partNo) {
return
}
this.loading = true
const params = {
outsourcingNo: this.outsourcingNo,
site: this.$store.state.user.site,
partNo: this.partNo,
}
getOutsourcingMaterials(params).then(({data})=>{
this.loading = false
if (data && data.code === 0) {
this.issueList = data.materials || []
} else {
this.$message.error(data.msg || '获取发料记录失败')
this.issueList = []
}
})
},
goDetail(item) {
this.$router.push({
name: 'outsourcingDirectIssueDetail',
params: {
outsourcingNo: this.outsourcingNo,
partNo: this.partNo,
partDesc: item.partDesc || '',
requiredQty: this.requiredQty,
issuedQty: item.issuedQty || 0,
issueRecord: {
itemNo: item.itemNo,
orderType: 'outsourcing',
transactionId: item.transactionId,
quantity: item.quantity,
batchNo: item.batchNo,
issuedQty: item.issuedQty || 0,
accountingId: item.accountingId,
}
},
})
},
},
mounted() {
this.outsourcingNo = this.$route.params.outsourcingNo
this.partNo = this.$route.params.partNo
this.requiredQty = this.$route.params.outsourcingInfo.requiredQty
this.loadIssueList()
},
}
</script>
<style scoped>
.pda-container {
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
background: #f5f5f5;
}
.header-bar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 16px;
background: #17B3A3;
color: white;
height: 40px;
min-height: 40px;
}
.header-left {
display: flex;
align-items: center;
cursor: pointer;
font-size: 16px;
font-weight: 500;
}
.header-left i {
margin-right: 8px;
font-size: 18px;
}
.header-right {
cursor: pointer;
font-size: 16px;
font-weight: 500;
}
.search-container {
padding: 12px 16px;
background: white;
display: flex;
flex-direction: column;
gap: 8px;
}
.card-title {
margin-bottom: 8px;
}
.title-label {
font-size: 12px;
color: #666;
display: block;
margin-bottom: 4px;
}
.content-area {
flex: 1;
overflow-y: auto;
}
.work-order-list {
overflow-y: auto;
}
.material-card {
background: white;
border-radius: 8px;
margin-bottom: 12px;
padding: 16px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
cursor: pointer;
transition: all 0.2s ease;
border: 2px solid transparent;
}
.material-card:hover {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
transform: translateY(-1px);
}
.material-card:active {
transform: translateY(0);
}
.part-desc-row {
margin-bottom: 12px;
padding: 0 4px;
}
.desc-text {
font-size: 12px;
color: #666;
line-height: 1.3;
word-break: break-all;
}
.card-details {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 4px;
}
.detail-item {
flex: 1;
text-align: center;
min-width: 50px;
max-width: 70px;
}
.detail-label {
font-size: 11px;
color: #666;
margin-bottom: 4px;
line-height: 1.2;
margin-left: -12px;
}
.detail-value {
font-size: 13px;
color: #333;
line-height: 1.2;
margin-left: -12px;
}
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
color: #999;
}
.empty-state i {
font-size: 48px;
margin-bottom: 16px;
}
.empty-state p {
font-size: 14px;
margin: 0;
}
.loading-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
color: #17B3A3;
}
.loading-state i {
font-size: 24px;
margin-bottom: 12px;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.loading-state p {
font-size: 14px;
margin: 0;
}
@media (max-width: 360px) {
.header-bar {
padding: 8px 12px;
}
.search-container {
padding: 8px 12px;
}
.work-order-list {
padding: 8px 12px;
}
.material-card {
padding: 12px;
}
.card-details {
flex-wrap: wrap;
gap: 6px;
}
.detail-item {
flex: 0 0 48%;
margin-bottom: 6px;
min-width: 50px;
}
}
</style>

140
src/views/modules/outsourcing-return/index.vue

@ -26,32 +26,65 @@
<div class="content-area">
<div class="work-order-list" v-if="searchResults.length > 0">
<div
v-for="(item, index) in searchResults"
v-for="(item, index) in displaySearchResults"
:key="index"
class="material-card"
@click="goToDetail(item)"
:class="['material-card', { selected: selectedOrder && isSameOrder(selectedOrder, item) }]"
@click="selectOrder(item)"
>
<div class="card-title">
<span class="title-label">委外单号{{ item.outsourcingOrderNo }}</span>
<span class="title-label">委外单号{{ item.orderNo }}</span>
</div>
<div class="part-desc-row">
<span class="desc-text">物料编码{{ item.partNo }}</span>
<span class="desc-text">物料编码{{ item.partNo }} &nbsp;&nbsp; 行号{{
item.lineNo
}}</span>
</div>
<div class="part-desc-row">
<span class="desc-text">{{ item.description }}</span>
</div>
<div class="card-details">
<div class="detail-item">
<div class="detail-label">发料数量</div>
<div class="detail-value">{{ item.issuedQty }}</div>
<div class="detail-label">库存数量</div>
<div class="detail-value">{{ item.inventoryQty }}</div>
</div>
<div class="detail-item">
<div class="detail-label">已退数量</div>
<div class="detail-value">{{ item.returnedQty || 0 }}</div>
<div class="detail-value">{{ item.invQtyToReceive || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ item.inventoryUOM }}</div>
</div>
</div>
</div>
</div>
<!-- 物料详情列表 -->
<div class="content-area" v-if="selectedOrder && materialList.length > 0">
<div
v-for="(material, index) in materialList"
:key="index"
class="material-card"
@click="goToDetail(material)"
>
<div class="card-title">
<span class="title-label">物料编码{{ material.componentPartNo }} &nbsp;&nbsp; 行号{{ material.lineNo }}</span>
</div>
<div class="part-desc-row">
<span class="desc-text">{{ material.componentPartDescription }}</span>
</div>
<div class="card-details">
<div class="detail-item">
<div class="detail-label">需求数量</div>
<div class="detail-value">{{ material.qtyRequired || 0}}</div>
</div>
<div class="detail-item">
<div class="detail-label">可退数量</div>
<div class="detail-value">{{ item.returnableQty }}</div>
<div class="detail-label">已发数量</div>
<div class="detail-value">{{ material.qtyIssued || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">预留数量</div>
<div class="detail-value">{{ material.reservedQty || 0}}</div>
</div>
</div>
</div>
@ -76,7 +109,7 @@
</template>
<script>
import { searchOutsourcingOrdersForReturn } from '@/api/outsourcing/outsourcing-return';
import { searchOutsourcingOrdersForReturn,getOutsourcingReturnOrderLineInfo } from '@/api/outsourcing/outsourcing-return';
export default {
data() {
@ -85,8 +118,19 @@ export default {
searchResults: [],
loading: false,
hasSearched: false,
selectedOrder: null,
materialList: [],
showOnlySelected: false,
};
},
computed: {
displaySearchResults() {
if (this.showOnlySelected && this.selectedOrder) {
return [this.selectedOrder];
}
return this.searchResults;
}
},
methods: {
handleSearch() {
if (!this.searchValue.trim()) {
@ -96,14 +140,18 @@ export default {
this.loading = true;
this.hasSearched = true;
this.searchResults = [];
this.materialList = [];
this.selectedOrder = null;
this.showOnlySelected = false;
const params = {
searchValue: this.searchValue.trim(),
site: this.$store.state.user.site,
};
searchOutsourcingOrdersForReturn(params)
.then(({ data }) => {
searchOutsourcingOrdersForReturn(params).then(({ data }) => {
this.loading = false;
if (data && data.code === 0) {
this.searchResults = data.orders || [];
@ -121,9 +169,61 @@ export default {
this.searchResults = [];
});
},
isSameOrder(a, b) {
if (!a || !b) return false;
return a.orderNo === b.orderNo && a.partNo === b.partNo && a.lineNo === b.lineNo;
},
selectOrder(order) {
if (
this.showOnlySelected &&
this.selectedOrder &&
this.isSameOrder(this.selectedOrder, order)
) {
//
this.selectedOrder = null;
this.materialList = [];
this.showOnlySelected = false;
return;
}
//
this.selectedOrder = order;
this.showOnlySelected = true;
this.loadMaterialList(order);
},
loadMaterialList(order) {
// API
let params = {
outsourcingNo:order.orderNo,
site:this.$store.state.user.site,
lineNo: order.lineNo
}
getOutsourcingReturnOrderLineInfo(params).then(({ data }) => {
this.loading = false;
if (data && data.code === 0) {
this.materialList = data.orders || [];
if (this.searchResults.length === 0) {
this.$message.info('未找到相关委外订单');
}
} else {
this.$message.error(data.msg || '搜索失败');
this.materialList = [];
}
})
.catch(() => {
this.loading = false;
this.$message.error('搜索失败');
this.materialList = [];
});
},
goToDetail(item) {
if (item.returnableQty <= 0) {
const returnableQty = item.inventoryQty - (item.invQtyToReceive || 0);
if (returnableQty <= 0) {
this.$message.warning('该物料已无可退数量');
return;
}
@ -131,10 +231,10 @@ export default {
this.$router.push({
name: 'outsourcingReturnPDAList',
params: {
outsourcingOrderNo: item.outsourcingOrderNo,
orderNo: item.orderNo,
partNo: item.partNo,
unissureQty: item.returnableQty,
itemNo: item.itemNo,
unissureQty: returnableQty,
itemNo: item.lineNo,
},
});
},
@ -225,7 +325,6 @@ export default {
/* 工单列表 */
.work-order-list {
overflow-y: auto;
padding: 12px 16px;
}
.material-card {
@ -244,6 +343,11 @@ export default {
transform: translateY(-1px);
}
.material-card.selected {
border-color: #17b3a3;
background: #f0fffe;
}
.material-card:active {
transform: translateY(0);
}

45
src/views/modules/outsourcing-return/outsourcingReturnPDAIssueList.vue

@ -119,24 +119,25 @@
</div>
</div>
<!-- 底部操作按钮 -->
<div class="bottom-actions">
<button
class="action-btn primary"
style="margin-left: 10px"
@click="confirmReturn"
>
确定退料
</button>
<!-- 底部操作按钮 -->
<div class="bottom-actions">
<el-button
class="action-btn primary"
style="margin-left: 10px"
:loading="loading"
@click="confirmReturn"
>
确定退料
</el-button>
<button
class="action-btn secondary"
style="margin-left: 10px"
@click="cancelReturn"
>
取消
</button>
</div>
<button
class="action-btn secondary"
style="margin-left: 10px"
@click="cancelReturn"
>
取消
</button>
</div>
<!-- 物料清单弹窗 -->
<div v-if="showMaterialDialog" class="material-overlay">
@ -288,7 +289,8 @@ export default {
editIndex: -1, //
unissureQty:0, //
itemNo:'', // ID
};
loading: false, //
};
},
computed: {
totalScannedQty() {
@ -329,7 +331,7 @@ export default {
// 退
scanMaterialLabelForOutsourcing(params).then(({data}) => {
if (data.code === 0 && data) {
if (data.code === 0 && data.labelInfo) {
//
const exists = this.labelList.find(
(item) => item.labelCode === labelCode
@ -430,6 +432,7 @@ export default {
return;
}
this.loading = true;
const returnParams = {
site: this.$store.state.user.site,
outsourcingOrderNo: this.orderNo,
@ -457,12 +460,14 @@ export default {
outsourcingReturnUnissueConfirm(returnParams).then(({data}) => {
if (data.code === 0 && data) {
this.$message.success("委外退料成功");
this.$router.back();
this.$router.push({ name: 'outsourcingReturn' });
} else {
this.$message.error(data.message || "操作失败");
}
}).catch(() => {
this.$message.error("操作失败");
}).finally(() => {
this.loading = false;
});
},

10
src/views/modules/outsourcing-return/outsourcingReturnPDAList.vue

@ -16,7 +16,7 @@
<label class="title-label">物料编码:{{ partNo }}</label>
</div>
<div class="card-title">
<label class="title-label">退数量:{{ unissureQty }}</label>
<label class="title-label">退数量:{{ unissureQty }}</label>
</div>
</div>
<div class="content-area">
@ -41,12 +41,12 @@
<div class="detail-value">{{ item.QUANTITY }}</div>
</div>
<div class="detail-item">
<div class="detail-label">撤销数量</div>
<div class="detail-label">已退数量</div>
<div class="detail-value">{{ item.QTY_REVERSED || 0 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">单位</div>
<div class="detail-value">{{ item.uom || '个' }}</div>
<div class="detail-label">可退数量</div>
<div class="detail-value">{{ item.QUANTITY - (item.QTY_REVERSED || 0) }}</div>
</div>
</div>
</div>
@ -126,7 +126,7 @@ export default {
},
},
mounted() {
this.outsourcingOrderNo = this.$route.params.outsourcingOrderNo;
this.outsourcingOrderNo = this.$route.params.orderNo;
this.partNo = this.$route.params.partNo;
this.unissureQty = this.$route.params.unissureQty;
this.itemNo = this.$route.params.itemNo;

Loading…
Cancel
Save