Browse Source

feat(supplier): 新增始发港字段功能

- 在供应商列表页面新增始发港列显示和编辑功能
- 在供应商信息页面增加始发港下拉选择组件
- 集成港口信息API实现始发港数据查询和映射
- 添加始发港字段的数据保存和展示逻辑
- 更新检验列表页面显示计划开始结束日期和验货地址
- 重构表格列顺序以优化用户体验
master
qiankanghui 3 days ago
parent
commit
c79d08de04
  1. 6
      src/views/modules/inspection/myInspectionList.vue
  2. 48
      src/views/modules/srmSupplier/supplierLeadTime.vue
  3. 59
      src/views/modules/srmSupplier/supplierList.vue
  4. 63
      src/views/modules/srmSupplier/supplierListView.vue

6
src/views/modules/inspection/myInspectionList.vue

@ -13,6 +13,9 @@
v-loading="loading"
style="width: 100%">
<el-table-column prop="requestNo" label="申请单号" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="planStartDate" label="计划开始日期" header-align="center" align="center" width="120"/>
<el-table-column prop="planEndDate" label="计划结束日期" header-align="center" align="center" width="120"/>
<el-table-column prop="inspectAddress" label="验货地址" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="orderRef1" label="PO号" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="supplierNo" label="供应商编码" header-align="center" align="left" min-width="120" show-overflow-tooltip/>
<el-table-column prop="supplierName" label="供应商名称" header-align="center" align="left" min-width="200" show-overflow-tooltip/>
@ -28,10 +31,7 @@
</template>
</el-table-column>
<el-table-column prop="needInspectDate" label="建议验货日期" header-align="center" align="center" width="120"/>
<el-table-column prop="planStartDate" label="计划开始日期" header-align="center" align="center" width="120"/>
<el-table-column prop="planEndDate" label="计划结束日期" header-align="center" align="center" width="120"/>
<el-table-column prop="qcOperator" label="QC人员" header-align="center" align="center" width="100"/>
<el-table-column prop="inspectAddress" label="验货地址" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
<el-table-column prop="inspectCityShort" label="城市简称" header-align="center" align="left" width="120" show-overflow-tooltip/>
<el-table-column prop="inspectContract" label="联系人" header-align="center" align="center" width="100"/>
<el-table-column prop="scheduleRemark" label="验货排程备注" header-align="center" align="center" width="100"/>

48
src/views/modules/srmSupplier/supplierLeadTime.vue

@ -42,6 +42,9 @@
<el-table-column prop="cShortOffice" header-align="center" align="center" min-width="100" label="ShortOffice"/>
<el-table-column prop="cShortNpc" header-align="center" align="center" min-width="100" label="ShortNpc"/>
<el-table-column prop="productionLeadTime" header-align="center" align="center" min-width="110" label="PRODUCTION Lead Time"/>
<el-table-column prop="defaultOriginPort" header-align="center" align="center" min-width="110" label="始发港" show-overflow-tooltip>
<template slot-scope="scope">{{ portNameByCode(scope.row.defaultOriginPort) }}</template>
</el-table-column>
<!-- 操作列 -->
<el-table-column
fixed="right"
@ -109,6 +112,18 @@
<el-input v-model="currentLeadTime.productionLeadTime"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="始发港">
<el-select v-model="currentLeadTime.defaultOriginPort" clearable filterable placeholder="请选择始发港" style="width: 100%">
<el-option
v-for="p in originPortOptions"
:key="p.portCode"
:label="p.portName"
:value="p.portCode">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
@ -122,6 +137,7 @@
<script>
import { searchSrmSupplierList, updateProductionLeadTime } from '@/api/srm/srmSupplier.js'
import { searchPortList } from '@/api/port/portInfo.js'
export default {
data () {
@ -140,6 +156,8 @@ export default {
pageSize: 20,
totalPage: 0,
mainDataList: [],
// 始发港下拉选项(来源 port_Info,is_departure_port='Y')
originPortOptions: [],
// Lead Time 编辑弹窗
leadTimeDialogVisible: false,
leadTimeSaving: false,
@ -151,7 +169,8 @@ export default {
status: '',
cShortOffice: '',
cShortNpc: '',
productionLeadTime: ''
productionLeadTime: '',
defaultOriginPort: ''
}
}
},
@ -169,6 +188,26 @@ export default {
'status-inactive': status === 'Inactive'
}
},
// 加载始发港下拉选项(port_Info 中 is_departure_port='Y')
loadOriginPortOptions () {
searchPortList({ isDeparturePort: 'Y' }).then(({ data }) => {
if (data && data.code === 0) {
this.originPortOptions = Array.isArray(data.rows) ? data.rows : []
} else {
this.originPortOptions = []
}
}).catch(() => {
this.originPortOptions = []
})
},
// 始发港保存的是港口编码,列表/展示时映射为港口名称;无匹配则回退原值
portNameByCode (code) {
if (code === null || code === undefined || code === '') {
return ''
}
const hit = this.originPortOptions.find(p => p.portCode === code)
return hit ? hit.portName : code
},
getMainData () {
this.searchData.page = this.pageIndex
this.searchData.limit = this.pageSize
@ -210,7 +249,8 @@ export default {
status: row.status,
cShortOffice: row.cShortOffice,
cShortNpc: row.cShortNpc,
productionLeadTime: row.productionLeadTime === null || row.productionLeadTime === undefined ? '' : String(row.productionLeadTime)
productionLeadTime: row.productionLeadTime === null || row.productionLeadTime === undefined ? '' : String(row.productionLeadTime),
defaultOriginPort: row.defaultOriginPort === null || row.defaultOriginPort === undefined ? '' : row.defaultOriginPort
}
this.leadTimeDialogVisible = true
},
@ -242,7 +282,8 @@ export default {
updateProductionLeadTime({
site: this.currentLeadTime.site,
supplierNo: this.currentLeadTime.supplierNo,
productionLeadTime: leadTime
productionLeadTime: leadTime,
defaultOriginPort: (this.currentLeadTime.defaultOriginPort || '').trim()
}).then(({ data }) => {
this.leadTimeSaving = false
if (data && data.code === 0) {
@ -261,6 +302,7 @@ export default {
created () {
this.getMainData()
this.loadOriginPortOptions()
}
}
</script>

59
src/views/modules/srmSupplier/supplierList.vue

@ -70,6 +70,9 @@
<span v-else-if="item.columnProp === 'handlingCharge'">
{{ formatSupplierNumberDisplay(scope.row[item.columnProp]) }}
</span>
<span v-else-if="item.columnProp === 'defaultOriginPort'">
{{ portNameByCode(scope.row.defaultOriginPort) }}
</span>
<span v-else>{{ scope.row[item.columnProp] }}</span>
</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
@ -290,6 +293,18 @@
<el-input v-model="currentSupplier.handlingCharge" type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="始发港">
<el-select v-model="currentSupplier.defaultOriginPort" clearable filterable placeholder="请选择始发港" style="width: 100%">
<el-option
v-for="p in originPortOptions"
:key="p.portCode"
:label="p.portName"
:value="p.portCode">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="form-section">
@ -420,6 +435,7 @@ import {
testCurrentLoginSite
} from '@/api/srm/srmSupplier.js'
import excel from '@/utils/excel-util.js'
import { searchPortList } from '@/api/port/portInfo.js'
import Chooselist from '@/views/modules/common/Chooselist_eam'
import SysDictSelect from '@/components/dict/SysDictSelect.vue'
import contract from './com_srmSupplier_Contract'
@ -454,6 +470,8 @@ export default {
mainDataList: [],
supplierGroupRequestList: [],
supplierDocTypeOptions: [],
// 始发港下拉选项(来源 port_Info,is_departure_port='Y')
originPortOptions: [],
dataListLoading: false,
activeName: 'AddressTab',
columnArray1: [
@ -583,6 +601,24 @@ export default {
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.functionId,
serialNumber: '811001Table1DefaultOriginPort',
tableId: '811001Table1',
tableName: '供应商信息',
columnProp: 'defaultOriginPort',
headerAlign: 'center',
align: 'center',
columnLabel: '默认始发港',
columnWidth: '120',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.functionId,
@ -1324,6 +1360,7 @@ export default {
updateBy: '',
memo:'',
planner: '',
defaultOriginPort: '',
site: this.$store.state.user.site,
},
supplierRules: {
@ -1378,6 +1415,26 @@ export default {
'status-inactive': status === 'Inactive'
}
},
// 加载始发港下拉选项(port_Info 中 is_departure_port='Y')
loadOriginPortOptions () {
searchPortList({ isDeparturePort: 'Y' }).then(({ data }) => {
if (data && data.code === 0) {
this.originPortOptions = Array.isArray(data.rows) ? data.rows : []
} else {
this.originPortOptions = []
}
}).catch(() => {
this.originPortOptions = []
})
},
// 始发港保存的是港口编码,列表/展示时映射为港口名称;无匹配则回退原值
portNameByCode (code) {
if (code === null || code === undefined || code === '') {
return ''
}
const hit = this.originPortOptions.find(p => p.portCode === code)
return hit ? hit.portName : code
},
/**
* 查询列表小单费去尾零。
* 业务意图:handling_charge 按“去尾零”展示,整数显示为 1 而不是 1.000。
@ -1754,6 +1811,7 @@ export default {
updateBy: '',
memo:'',
planner: '',
defaultOriginPort: '',
site: this.$store.state.user.site,
}
this.loadSupplierDocTypeOptions()
@ -1841,6 +1899,7 @@ export default {
created() {
// 查询报表的类型
this.getMainData()
this.loadOriginPortOptions()
}
}

63
src/views/modules/srmSupplier/supplierListView.vue

@ -68,6 +68,9 @@
<span v-else-if="item.columnProp === 'handlingCharge'">
{{ formatSupplierNumberDisplay(scope.row[item.columnProp]) }}
</span>
<span v-else-if="item.columnProp === 'defaultOriginPort'">
{{ portNameByCode(scope.row.defaultOriginPort) }}
</span>
<span v-else>{{ scope.row[item.columnProp] }}</span>
</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
@ -138,6 +141,7 @@ import {
searchSupplierGroupRequestList,
searchSrmSupplierList
} from '@/api/srm/srmSupplier.js'
import { searchPortList } from '@/api/port/portInfo.js'
import excel from '@/utils/excel-util.js'
import Chooselist from '@/views/modules/common/Chooselist_eam'
import contract from './com_srmSupplier_Contract'
@ -170,6 +174,8 @@ export default {
currentFieldType: '', // 当前字段类型('mainPlanner')
mainDataList: [],
supplierGroupRequestList: [],
// 始发港下拉选项(来源 port_Info,is_departure_port='Y')
originPortOptions: [],
dataListLoading: false,
activeName: 'AddressTab',
columnArray1: [
@ -281,6 +287,42 @@ export default {
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.functionId,
serialNumber: '811001Table1ProductionLeadTime',
tableId: '811001Table1',
tableName: '供应商信息',
columnProp: 'productionLeadTime',
headerAlign: 'center',
align: 'center',
columnLabel: 'PRODUCTION LEAD TIME',
columnWidth: '160',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.functionId,
serialNumber: '811001Table1DefaultOriginPort',
tableId: '811001Table1',
tableName: '供应商信息',
columnProp: 'defaultOriginPort',
headerAlign: 'center',
align: 'center',
columnLabel: '默认始发港',
columnWidth: '120',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.functionId,
@ -1017,6 +1059,26 @@ export default {
'status-inactive': status === 'Inactive'
}
},
// 加载始发港下拉选项(port_Info 中 is_departure_port='Y')
loadOriginPortOptions () {
searchPortList({ isDeparturePort: 'Y' }).then(({ data }) => {
if (data && data.code === 0) {
this.originPortOptions = Array.isArray(data.rows) ? data.rows : []
} else {
this.originPortOptions = []
}
}).catch(() => {
this.originPortOptions = []
})
},
// 始发港保存的是港口编码,列表展示时映射为港口名称;无匹配则回退原值
portNameByCode (code) {
if (code === null || code === undefined || code === '') {
return ''
}
const hit = this.originPortOptions.find(p => p.portCode === code)
return hit ? hit.portName : code
},
/**
* 查询列表小单费去尾零。
* 业务意图:handling_charge 按“去尾零”展示,整数显示为 1 而不是 1.000。
@ -1239,6 +1301,7 @@ export default {
created () {
// 查询报表的类型
this.getMainData()
this.loadOriginPortOptions()
}
}

Loading…
Cancel
Save