Browse Source

获取港口信息

master
yanyan 1 month ago
parent
commit
139d2550fe
  1. 3
      src/api/port/portTransit.js
  2. 164
      src/views/modules/order/poOrder.vue

3
src/api/port/portTransit.js

@ -10,3 +10,6 @@ export function createTransit(data) { return request({ url: '/portTransit/save',
export function updateTransit(data) { return request({ url: '/portTransit/save', method: 'post', data }) } export function updateTransit(data) { return request({ url: '/portTransit/save', method: 'post', data }) }
// 删除 // 删除
export function deleteTransit(data) { return request({ url: '/portTransit/delete', method: 'delete', data }) } export function deleteTransit(data) { return request({ url: '/portTransit/delete', method: 'delete', data }) }
// 查询运输选项列表
export function searchTransportOptions(data) { return request({ url: '/portTransit/calculateArrivalTime', method: 'post', data }) }

164
src/views/modules/order/poOrder.vue

@ -84,6 +84,57 @@
:value="opt.value"> :value="opt.value">
</el-option> </el-option>
</el-select> </el-select>
</template>
<template v-else-if="editMode && item.editAble && item.columnProp==='departure'">
<el-select
v-model="rowDeparture[scope.row.id]"
size="mini"
style="width: 100%"
clearable
filterable
placeholder="请选择始发港"
@change="(val) => handlePortChange(scope.row, val)">
<el-option
v-for="opt in poDepartureOptions"
:key="String(opt.value)"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</template>
<template v-else-if="editMode && item.editAble && item.columnProp==='destination'">
<el-select
v-model="rowDestination[scope.row.id]"
size="mini"
style="width: 100%"
clearable
filterable
placeholder="请选择目的港"
@change="(val) => handlePortChange(scope.row, val)">
<el-option
v-for="opt in poDestinationOptions"
:key="String(opt.value)"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</template>
<template v-else-if="editMode && item.editAble && item.columnProp==='shipVia'">
<el-select
v-model="rowShipVia[scope.row.id]"
size="mini"
style="width: 100%"
clearable
filterable
placeholder="请选择运输方式"
@change="(val) => handlePortChange(scope.row, val)">
<el-option
v-for="opt in transportOptions"
:key="String(opt.value)"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</template> </template>
<template v-else-if="editMode && item.editAble"> <template v-else-if="editMode && item.editAble">
<!-- 下拉框 --> <!-- 下拉框 -->
@ -160,20 +211,28 @@
import { searchPoDetailPage, batchUpdatePoDetail } from '@/api/order/poOrder.js' import { searchPoDetailPage, batchUpdatePoDetail } from '@/api/order/poOrder.js'
import { getPartList } from '@/api/part/partInfo.js' import { getPartList } from '@/api/part/partInfo.js'
import { checkSrmSupplierList } from '@/api/srm/srmSupplier.js' import { checkSrmSupplierList } from '@/api/srm/srmSupplier.js'
import { searchTransportOptions } from '@/api/port/portTransit.js'
export default { export default {
name: 'PoOrder', name: 'PoOrder',
data () { data () {
return { return {
loading: false,
masterRows: [], masterRows: [],
/** /**
* 需要单独写编辑 UI columnProp 填在这里才会走模板里自定义分支不在此数组的仍用默认 select/num/text - rqrq * 需要单独写编辑 UI columnProp 填在这里才会走模板里自定义分支不在此数组的仍用默认 select/num/text - rqrq
* 示例['mPlanner', 'comments'] * 示例['mPlanner', 'comments']
*/ */
rowDeparture: {}, //
rowDestination: {}, //
rowShipVia: {}, //
transportOptions: [], //
rowPartNo: {}, // rowPartNo: {}, //
rowSupplierNo: {}, // rowSupplierNo: {}, //
poPartNoOptions: [], poPartNoOptions: [],
supplierOptions: [], supplierOptions: [],
poDepartureOptions: [],
poDestinationOptions: [],
customEditColumnProps: [], customEditColumnProps: [],
currentRow: null, currentRow: null,
@ -184,6 +243,7 @@ export default {
{ label: '已取消', value: '已取消' } { label: '已取消', value: '已取消' }
], ],
poPartNoOptions: [], poPartNoOptions: [],
poDepartureOptions: [],
transportOptions: [ transportOptions: [
{ label: '海运 SEA', value: 'SEA' }, { label: '海运 SEA', value: 'SEA' },
{ label: '空运 AIR', value: 'AIR' }, { label: '空运 AIR', value: 'AIR' },
@ -573,8 +633,8 @@ export default {
columnWidth: 100, columnWidth: 100,
showOverflowTooltip: true, showOverflowTooltip: true,
editAble: true, editAble: true,
editType: 'text',
selectOptionsKey: '',
editType: 'select',
selectOptionsKey: 'departureOptions',
selectOptions: null selectOptions: null
}, },
{ {
@ -596,8 +656,8 @@ export default {
columnWidth: 110, columnWidth: 110,
showOverflowTooltip: true, showOverflowTooltip: true,
editAble: true, editAble: true,
editType: 'text',
selectOptionsKey: '',
editType: 'select',
selectOptionsKey: 'destinationOptions',
selectOptions: null selectOptions: null
}, },
{ {
@ -813,7 +873,7 @@ export default {
serialNumber: '812003Table1ACrd', serialNumber: '812003Table1ACrd',
tableId: '812003Table1', tableId: '812003Table1',
tableName: 'PO Order', tableName: 'PO Order',
columnProp: 'crd',
columnProp: 'realCrd',
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: 'A_CRD', columnLabel: 'A_CRD',
@ -1188,7 +1248,7 @@ export default {
...row, ...row,
changeFlag: 0 // changeFlag: 0 //
})) }))
this.initRowEditValues()
this.pageIndex = data.page.currPage this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount this.totalPage = data.page.totalCount
@ -1225,13 +1285,6 @@ export default {
this.$set(row, 'shortOffice', selectedOption.shortOffice || '') this.$set(row, 'shortOffice', selectedOption.shortOffice || '')
this.$set(row, 'shortNpc', selectedOption.shortNpc || '') this.$set(row, 'shortNpc', selectedOption.shortNpc || '')
this.$set(row, 'changeFlag', 1) 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, '')
} }
}, },
@ -1248,23 +1301,48 @@ export default {
this.$set(row, 'category', selectedOption.category || '') this.$set(row, 'category', selectedOption.category || '')
this.$set(row, 'sku', selectedOption.sku || '') this.$set(row, 'sku', selectedOption.sku || '')
this.$set(row, 'changeFlag', 1) this.$set(row, 'changeFlag', 1)
} else if (!partNo) {
//
this.$set(row, 'partNo', '')
this.$set(row, 'category', '')
this.$set(row, 'sku', '')
}
},
handlePortChange(row, field, value) {
console.log(`${field}变更:`, value, '行ID:', row.id)
this.$set(row, field, value) //
this.$set(row, 'changeFlag', 1) this.$set(row, 'changeFlag', 1)
//
this.$set(this.rowPartNo, row.id, '')
// 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 () { toggleEditMode () {
if (!this.editMode) { if (!this.editMode) {
this.editMode = true this.editMode = true
this.initRowEditValues()
this.getSupplierOptions()
this.getPartNoOptions()
return return
} }
const changed = this.masterRows.filter(r => r.changeFlag === 1) const changed = this.masterRows.filter(r => r.changeFlag === 1)
@ -1272,16 +1350,7 @@ export default {
this.batchUpdatePoOrder(changed) 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() { getPartNoOptions() {
console.log('获取分类选项') console.log('获取分类选项')
getPartList( getPartList(
@ -1294,7 +1363,6 @@ export default {
this.poPartNoOptions = (data.rows || []).map(item => ({ this.poPartNoOptions = (data.rows || []).map(item => ({
label: item.partNo, label: item.partNo,
value: item.partNo, value: item.partNo,
partNo: item.partNo,
category: item.category, category: item.category,
sku: item.sku sku: item.sku
})) }))
@ -1321,8 +1389,6 @@ export default {
this.supplierOptions = (data.rows || []).map(item => ({ this.supplierOptions = (data.rows || []).map(item => ({
label: item.supplierName, label: item.supplierName,
value: item.supplierNo, value: item.supplierNo,
supplierNo: item.supplierNo,
supplierName: item.supplierName,
shortOffice: item.cshortOffice, shortOffice: item.cshortOffice,
shortNpc: item.cshortNpc shortNpc: item.cshortNpc
})) }))
@ -1334,6 +1400,32 @@ export default {
this.$message.error('操作失败: ' + error.message) 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) { batchUpdatePoOrder(changed) {

Loading…
Cancel
Save