From 139d2550fe6b0772f0e282effcf06beb11c67620 Mon Sep 17 00:00:00 2001
From: yanyan <513352169@qq.com>
Date: Mon, 27 Apr 2026 09:26:38 +0800
Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=B8=AF=E5=8F=A3=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/port/portTransit.js | 5 +-
src/views/modules/order/poOrder.vue | 170 +++++++++++++++++++++-------
2 files changed, 135 insertions(+), 40 deletions(-)
diff --git a/src/api/port/portTransit.js b/src/api/port/portTransit.js
index 9dacdab..918c2cb 100644
--- a/src/api/port/portTransit.js
+++ b/src/api/port/portTransit.js
@@ -9,4 +9,7 @@ export function createTransit(data) { return request({ url: '/portTransit/save',
// 更新
export function updateTransit(data) { return request({ url: '/portTransit/save', method: 'post', data }) }
// 删除
-export function deleteTransit(data) { return request({ url: '/portTransit/delete', method: 'delete', data }) }
\ No newline at end of file
+export function deleteTransit(data) { return request({ url: '/portTransit/delete', method: 'delete', data }) }
+
+// 查询运输选项列表
+export function searchTransportOptions(data) { return request({ url: '/portTransit/calculateArrivalTime', method: 'post', data }) }
\ No newline at end of file
diff --git a/src/views/modules/order/poOrder.vue b/src/views/modules/order/poOrder.vue
index c2193de..f1bbc30 100644
--- a/src/views/modules/order/poOrder.vue
+++ b/src/views/modules/order/poOrder.vue
@@ -84,6 +84,57 @@
:value="opt.value">
+
+
+ handlePortChange(scope.row, val)">
+
+
+
+
+
+ handlePortChange(scope.row, val)">
+
+
+
+
+
+ handlePortChange(scope.row, val)">
+
+
+
@@ -160,20 +211,28 @@
import { searchPoDetailPage, batchUpdatePoDetail } from '@/api/order/poOrder.js'
import { getPartList } from '@/api/part/partInfo.js'
import { checkSrmSupplierList } from '@/api/srm/srmSupplier.js'
+import { searchTransportOptions } from '@/api/port/portTransit.js'
export default {
name: 'PoOrder',
data () {
return {
+ loading: false,
masterRows: [],
/**
* 需要单独写编辑 UI 的 columnProp 填在这里,才会走模板里「自定义」分支;不在此数组的仍用默认 select/num/text - rqrq
* 示例:['mPlanner', 'comments']
*/
+ rowDeparture: {}, // 存储每行选中的始发港
+ rowDestination: {}, // 存储每行选中的目的港
+ rowShipVia: {}, // 存储每行选中的运输方式
+ transportOptions: [], // 运输方式选项
rowPartNo: {}, //存储每行选中的物料编号
rowSupplierNo: {}, //存储每行选中的供应商编号
poPartNoOptions: [],
supplierOptions: [],
+ poDepartureOptions: [],
+ poDestinationOptions: [],
customEditColumnProps: [],
currentRow: null,
@@ -184,6 +243,7 @@ export default {
{ label: '已取消', value: '已取消' }
],
poPartNoOptions: [],
+ poDepartureOptions: [],
transportOptions: [
{ label: '海运 SEA', value: 'SEA' },
{ label: '空运 AIR', value: 'AIR' },
@@ -573,8 +633,8 @@ export default {
columnWidth: 100,
showOverflowTooltip: true,
editAble: true,
- editType: 'text',
- selectOptionsKey: '',
+ editType: 'select',
+ selectOptionsKey: 'departureOptions',
selectOptions: null
},
{
@@ -596,8 +656,8 @@ export default {
columnWidth: 110,
showOverflowTooltip: true,
editAble: true,
- editType: 'text',
- selectOptionsKey: '',
+ editType: 'select',
+ selectOptionsKey: 'destinationOptions',
selectOptions: null
},
{
@@ -813,7 +873,7 @@ export default {
serialNumber: '812003Table1ACrd',
tableId: '812003Table1',
tableName: 'PO Order',
- columnProp: 'crd',
+ columnProp: 'realCrd',
headerAlign: 'center',
align: 'center',
columnLabel: 'A_CRD',
@@ -1188,7 +1248,7 @@ export default {
...row,
changeFlag: 0 // 初始化变更标记
}))
- this.initRowEditValues()
+
this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount
@@ -1225,14 +1285,7 @@ export default {
this.$set(row, 'shortOffice', selectedOption.shortOffice || '')
this.$set(row, 'shortNpc', selectedOption.shortNpc || '')
this.$set(row, 'changeFlag', 1)
- } else if (!supplierNo) {
- this.$set(row, 'supplierName', '')
- this.$set(row, 'supplierNo', '')
- this.$set(row, 'shortOffice', '')
- this.$set(row, 'shortNpc', '')
- this.$set(row, 'changeFlag', 1)
- this.$set(this.rowSupplierNo, row.id, '')
- }
+ }
},
handlePartNoChange(row, partNo) {
@@ -1248,23 +1301,48 @@ export default {
this.$set(row, 'category', selectedOption.category || '')
this.$set(row, 'sku', selectedOption.sku || '')
this.$set(row, 'changeFlag', 1)
- } else if (!partNo) {
- // 清空选择
- this.$set(row, 'partNo', '')
- this.$set(row, 'category', '')
- this.$set(row, 'sku', '')
- this.$set(row, 'changeFlag', 1)
- // 清除存储的物料编号
- this.$set(this.rowPartNo, row.id, '')
+ }
+ },
+ handlePortChange(row, field, value) {
+ console.log(`${field}变更:`, value, '行ID:', row.id)
+ this.$set(row, field, value) // 直接设置字段值
+ this.$set(row, 'changeFlag', 1)
+
+ // 注意:这里还需要同步更新对应的 rowDeparture/rowDestination/rowShipVia
+ if (field === 'departure') {
+ this.$set(this.rowDeparture, row.id, value)
+ } else if (field === 'destination') {
+ this.$set(this.rowDestination, row.id, value)
+ } else if (field === 'shipVia') {
+ this.$set(this.rowShipVia, row.id, value)
+ }
+
+ // 如果三个字段都填写了,获取运输方式选项
+ if (row.departure && row.destination && row.shipVia) {
+ this.getTransportOptions(row.departure, row.destination, row.shipVia)
}
},
-
+ getTransportOptions(departure, destination, shipVia) {
+ console.log('获取运输方式选项:', departure, destination, shipVia)
+ //调用接口获取运输方式选项
+ searchTransportOptions({ departure, destination, shipVia }).then(({ data }) => {
+ if (data && data.code === 0) {
+ this.transportOptions = (data.rows || []).map(item => ({
+ label: item.shipVia,
+ value: item.shipVia,
+ eta: item.eta
+ }))
+ } else {
+ this.$message.error(data.msg || '获取运输方式选项失败')
+ }
+ }).catch(error => {
+ this.$message.error('获取运输方式选项失败: ' + error.message)
+ })
+ },
+
toggleEditMode () {
if (!this.editMode) {
this.editMode = true
- this.initRowEditValues()
- this.getSupplierOptions()
- this.getPartNoOptions()
return
}
const changed = this.masterRows.filter(r => r.changeFlag === 1)
@@ -1272,16 +1350,7 @@ export default {
this.batchUpdatePoOrder(changed)
},
- initRowEditValues () {
- this.rowSupplierNo = {}
- this.rowPartNo = {}
- this.masterRows.forEach(row => {
- if (row && row.id != null) {
- this.$set(this.rowSupplierNo, row.id, row.supplierNo || '')
- this.$set(this.rowPartNo, row.id, row.partNo || '')
- }
- })
- },
+
getPartNoOptions() {
console.log('获取分类选项')
getPartList(
@@ -1294,7 +1363,6 @@ export default {
this.poPartNoOptions = (data.rows || []).map(item => ({
label: item.partNo,
value: item.partNo,
- partNo: item.partNo,
category: item.category,
sku: item.sku
}))
@@ -1321,8 +1389,6 @@ export default {
this.supplierOptions = (data.rows || []).map(item => ({
label: item.supplierName,
value: item.supplierNo,
- supplierNo: item.supplierNo,
- supplierName: item.supplierName,
shortOffice: item.cshortOffice,
shortNpc: item.cshortNpc
}))
@@ -1334,6 +1400,32 @@ export default {
this.$message.error('操作失败: ' + error.message)
})
},
+ getPortOptions(){
+ console.log('获取港口选项')
+ searchTransportOptions(
+ {
+ site: this.$store.state.user.site
+ }
+ ).then(({data}) => {
+ if (data && data.code === 0) {
+ console.log('接口返回的rows:', data.rows) // 查看返回数据
+
+ this.transportOptions = (data.rows || []).map(item => ({
+ label: item.supplierName,
+ value: item.supplierNo,
+ destination: item.destination,
+ departure: item.departure,
+ shipVia: item.shipVia,
+ etc: item.eta
+ }))
+
+ } else {
+ this.$message.error(data.msg || '操作失败')
+ }
+ }).catch(error => {
+ this.$message.error('操作失败: ' + error.message)
+ })
+ },
// 保存订单信息
batchUpdatePoOrder(changed) {