diff --git a/src/views/modules/customerIssue/customerIssuePDA.vue b/src/views/modules/customerIssue/customerIssuePDA.vue
index 2875ac0..00d3829 100644
--- a/src/views/modules/customerIssue/customerIssuePDA.vue
+++ b/src/views/modules/customerIssue/customerIssuePDA.vue
@@ -108,6 +108,7 @@ import {
getCustomerIssueNotifyHeaderOrderMaterialList,
} from '@/api/customerIssue/customer-issue'
import { getWorkOrderMaterials } from '@/api/production/production-issue'
+import { filterRowsByAuthorizedSubSite, getAuthorizedSubSiteCodeList } from '@/utils/subSiteAuth.js'
export default {
name: 'customerIssuePDA',
@@ -120,7 +121,7 @@ export default {
// 基于申请单发料
requestIssueForm: {
- site: localStorage.getItem('site'),
+ site: '',
requestNo: '',
operatorName: 'PDA_USER',
issueReason: '',
@@ -162,6 +163,12 @@ export default {
this.message = ''
},
+ // 取接口返回的 CONTRACT 作为后续业务 site
+ getMaterialSite(material) {
+ if (!material) return ''
+ return material.CONTRACT || material.contract || ''
+ },
+
// 基于申请单发料相关方法
async loadIssueRequestMaterials() {
if (this.loading) {
@@ -185,13 +192,21 @@ export default {
this.materialList = []
this.selectedRequestMaterial = null
this.showOnlySelected = false
+ this.requestIssueForm.site = ''
getCustomerIssueNotifyHeaderInfo({
- site: localStorage.getItem('site'),
+ site: localStorage.getItem('site')+'%',
workOrderNo: this.requestIssueForm.requestNo,
}).then(({ data }) => {
if (data.code === 0) {
- this.issueRequestMaterials = data.data || []
+ const sourceRows = data.data || []
+ const authorizedSubSiteCodeList = getAuthorizedSubSiteCodeList(this.$store.state.user.subSiteCodeList)
+ // 接口按site前缀查询会返回同前缀下的所有子site,这里按当前用户授权子site做二次过滤
+ this.issueRequestMaterials = filterRowsByAuthorizedSubSite(
+ sourceRows,
+ authorizedSubSiteCodeList,
+ ['CONTRACT', 'contract']
+ )
if (this.issueRequestMaterials.length === 0) {
this.$message.warning('查询申请单不存在')
}
@@ -222,18 +237,25 @@ export default {
this.selectedWorkOrder = ''
this.materialList = []
this.showOnlySelected = false
+ this.requestIssueForm.site = ''
return
}
// 选择并仅显示当前申请单物料
this.selectedRequestMaterial = material
this.selectedWorkOrder = material.SHIPMENT_ID
+ this.requestIssueForm.site = this.getMaterialSite(material)
this.showOnlySelected = true
this.getCustomerIssueNotifyHeaderOrderMaterialList(material)
},
getCustomerIssueNotifyHeaderOrderMaterialList(material){
+ const site = this.getMaterialSite(material)
+ if (!site) {
+ this.$message.warning('未获取到申请单站点信息')
+ return
+ }
let params = {
- site: localStorage.getItem('site'),
+ site,
workOrderNo: material.SHIPMENT_ID,
};
getCustomerIssueNotifyHeaderOrderMaterialList(params).then(({ data }) => {
@@ -255,12 +277,18 @@ export default {
// 打开材料列表页面(仿照 productionReturnPicking.vue 的 openIssueList)
openIssueDetail(material) {
+ const site = this.getMaterialSite(material) || this.requestIssueForm.site
+ if (!site) {
+ this.$message.warning('未获取到申请单站点信息')
+ return
+ }
this.$router.push({
name: 'customerIssuePDAIssueList',
query: {
state: material.STATE, // 申请单行号
shipmentId: material.SHIPMENT_ID, // 客户订单号
orderType: material.SHIPMENT_TYPE, // 订单类型
+ site,
}
})
},
diff --git a/src/views/modules/customerIssue/customerIssuePDAIssueList.vue b/src/views/modules/customerIssue/customerIssuePDAIssueList.vue
index 3f3559d..954f823 100644
--- a/src/views/modules/customerIssue/customerIssuePDAIssueList.vue
+++ b/src/views/modules/customerIssue/customerIssuePDAIssueList.vue
@@ -26,9 +26,12 @@
@@ -364,6 +419,7 @@ export default {
labelList: [],
orderNo: '',
orderType: '',
+ site: '',
isRemoveMode: false, // 默认为添加模式
partNo: '', // 物料编码
transactionId: '', // 关联单号
@@ -410,6 +466,10 @@ export default {
},
pendingIssueParams: null,
shipmentLine: [],
+ // shipmentline 物料清单弹窗
+ showShipmentLineDialogVisible: false,
+ shipmentLineLoading: false,
+ shipmentLineList: [],
}
},
computed: {
@@ -494,7 +554,7 @@ export default {
const params = {
scannedLabel: labelCode,
workOrderNo: this.orderNo,
- site: localStorage.getItem('site'),
+ site: this.site,
batchNo: this.batchNo,
}
// 检查是否已经扫描过
@@ -522,7 +582,7 @@ export default {
engChgLevel: labelInfo.engChgLevel || '1',
detailId: labelInfo.detailId || '',
unitId: labelInfo.unitId || '',
- site: labelInfo.site || localStorage.getItem('site'),
+ site: labelInfo.site || this.site,
height: labelInfo.height || null,
})
@@ -544,7 +604,7 @@ export default {
return
}
let params = {
- site: localStorage.getItem('site'),
+ site: this.site,
unitId: labelCode,
detailId: exists.detailId,
}
@@ -622,7 +682,7 @@ export default {
const updateParams = {
detailId: this.editForm.detailId,
site:
- this.labelList[this.editIndex].site || localStorage.getItem('site'),
+ this.labelList[this.editIndex].site || this.site,
unitId: this.labelList[this.editIndex].unitId,
locationId: this.editForm.locationId,
qtyToIssue: Number(this.editForm.quantity),
@@ -687,7 +747,7 @@ export default {
},
buildIssueParams() {
return {
- site: localStorage.getItem('site'),
+ site: this.site,
workOrderNo: this.orderNo,
batchNo: this.batchNo,
componentPartNo: this.partNo,
@@ -712,7 +772,7 @@ export default {
async prepareComparisonData() {
this.shipmentLine = []
const params = {
- site: localStorage.getItem('site'),
+ site: this.site,
workOrderNo: this.orderNo,
}
await getCustomerIssueNotifyHeaderOrderMaterialList(params).then(
@@ -796,6 +856,53 @@ export default {
this.showSummaryDialog = false
this.pendingIssueParams = null
},
+ // 查看 shipment 下 shipmentline 物料数量
+ showShipmentLineDialog() {
+ this.showShipmentLineDialogVisible = true
+ this.loadShipmentLineList()
+ },
+ closeShipmentLineDialog() {
+ this.showShipmentLineDialogVisible = false
+ },
+ async loadShipmentLineList() {
+ if (!this.site || !this.orderNo) {
+ this.$message.error('缺少必要参数,无法获取物料清单')
+ this.shipmentLineList = []
+ return
+ }
+ this.shipmentLineLoading = true
+ try {
+ const { data } = await getCustomerIssueNotifyHeaderOrderMaterialList({
+ site: this.site,
+ workOrderNo: this.orderNo,
+ })
+ if (!data || data.code !== 0) {
+ this.$message.error((data && data.msg) || '获取物料清单失败')
+ this.shipmentLineList = []
+ return
+ }
+ const materials = data.data || []
+ this.shipmentLineList = materials.map((item) => {
+ const inventoryQty =
+ Number(this.pickFieldValue(item, ['INVENTORY_QTY'], 0)) || 0
+ const qtyAssigned =
+ Number(this.pickFieldValue(item, ['QTY_ASSIGNED'], 0)) || 0
+ return {
+ lineNo: this.pickFieldValue(item, ['SHIPMENT_LINE_NO'], ''),
+ partNo: this.pickFieldValue(item, ['INVENTORY_PART_NO'], ''),
+ inventoryQty,
+ qtyAssigned,
+ remainQty: this.safeAdd(inventoryQty, -qtyAssigned),
+ uom: this.pickFieldValue(item, ['INVENTORY_UOM'], ''),
+ }
+ })
+ } catch (error) {
+ this.$message.error('获取物料清单失败')
+ this.shipmentLineList = []
+ } finally {
+ this.shipmentLineLoading = false
+ }
+ },
proceedIssueConfirm() {
if (!this.pendingIssueParams) {
this.pendingIssueParams = this.buildIssueParams()
@@ -864,7 +971,7 @@ export default {
const printRequest = {
userId: localStorage.getItem('userName'),
username: localStorage.getItem('userName'),
- site: localStorage.getItem('site'),
+ site: this.site,
unitIds: unitIds,
labelType: printLabelType,
}
@@ -916,7 +1023,7 @@ export default {
let params = {
shipmentId: this.orderNo,
partNo: this.partNo,
- site: localStorage.getItem('site'),
+ site: this.site,
}
this.labelList = []
getShipmentHuDetail(params)
@@ -1081,6 +1188,7 @@ export default {
this.orderNo = this.$route.query.shipmentId
this.state = this.$route.query.state
this.orderType = this.$route.query.orderType
+ this.site = this.$route.query.site || ''
if (!this.orderNo) {
this.$message.error('参数错误')
@@ -1246,6 +1354,36 @@ export default {
margin-bottom: 16px;
}
+.order-card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ margin-bottom: 0;
+ gap: 8px;
+}
+
+.order-card-left {
+ flex: 1;
+ min-width: 0;
+}
+
+.order-card-left .title-label {
+ margin-bottom: 4px;
+}
+
+.order-card-left .title-label:last-child {
+ margin-bottom: 0;
+}
+
+.shipment-line-table .summary-table-row {
+ grid-template-columns: 0.6fr 1.4fr 0.8fr 0.8fr 0.8fr;
+}
+
+.shipment-line-table .highlight-qty {
+ color: #17b3a3;
+ font-weight: 600;
+}
+
.title-label {
font-size: 11px;
color: #999;
diff --git a/src/views/modules/mr-issue/mrPicking.vue b/src/views/modules/mr-issue/mrPicking.vue
index 94e7e53..733323f 100644
--- a/src/views/modules/mr-issue/mrPicking.vue
+++ b/src/views/modules/mr-issue/mrPicking.vue
@@ -104,6 +104,7 @@