Browse Source

Merge remote-tracking branch 'origin/master'

master
qiankanghui 1 month ago
parent
commit
f7b917cc65
  1. 11
      src/api/order/poOrder.js
  2. 2
      src/api/part/partInfo.js
  3. 8
      src/api/port/portInfo.js
  4. 12
      src/api/port/portTransit.js
  5. 1
      src/api/supplier/purQuotation.js
  6. 509
      src/views/modules/order/poOrder.vue
  7. 408
      src/views/modules/port/portInfo.vue
  8. 236
      src/views/modules/port/portTransit.vue

11
src/api/order/poOrder.js

@ -0,0 +1,11 @@
import { createAPI } from '@/utils/httpRequest.js'
export const searchPoDetailList = (data) => createAPI(`/pODetail/list`, 'post', data)
export const searchPoDetailPage = (data) => createAPI(`/pODetail/page`, 'post', data)
export const createPoDetail = (data) => createAPI(`/pODetail/save`, 'post', data)
export const updatePoDetail = (data) => createAPI(`/pODetail/save`, 'post', data)
export const deletePoDetail = (data) => createAPI(`/pODetail/delete`, 'post', data)
//批量更新
export const batchUpdatePoDetail = (data) => createAPI(`/pODetail/batchUpdatePoDetail`, 'post', data)

2
src/api/part/partInfo.js

@ -1,6 +1,6 @@
import { createAPI } from '@/utils/httpRequest.js'
export const getPartList = data => createAPI('/part/list', 'POST', data)
export const searchPartList = data => createAPI('/part/searchPartList', 'POST', data)
export const createPart = data => createAPI('/part/save', 'POST', data)
export const updatePart = data => createAPI('/part/save', 'POST', data)

8
src/api/port/portInfo.js

@ -0,0 +1,8 @@
import { createAPI } from '@/utils/httpRequest.js'
export const searchPortPage = data => createAPI('/portInfo/page', 'POST', data)
export const searchPortList = data => createAPI('/portInfo/list', 'POST', data)
export const createPort = data => createAPI('/portInfo/save', 'POST', data)
export const updatePort = data => createAPI('/portInfo/save', 'POST', data)
export const searchPortInfo = data => createAPI('portInfo/getPort','POST', data)
export const deletePort = id => createAPI('/portInfo/delete', 'POST', { id: id })

12
src/api/port/portTransit.js

@ -0,0 +1,12 @@
import { createAPI } from '@/utils/httpRequest.js'
//分页列表
export const searchTransitPage = data => createAPI('/portTransit/page', 'POST', data)
// 查询列表(根据港口编码)
export function getTransitList(data) { return request({ url: '/portTransit/list', method: 'post', data }) }
// 新增
export function createTransit(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 }) }

1
src/api/supplier/purQuotation.js

@ -4,7 +4,6 @@ export const searchPurHeaderList = (data) => createAPI(`/supplier/getPurHeaderLi
export const createPurHeader = (data) => createAPI(`/supplier/savePurHeader`, 'post', data)
export const updatePurHeader = (data) => createAPI(`/supplier/savePurHeader`, 'post', data)
export const deletePurHeader = (data) => createAPI(`/supplier/delPurHeader`, 'post', data)
export const updatePurHeaderStatus = (data) => createAPI(`/supplier/updatePurHeaderStatus`, 'post', data)
//询价提交
export const updatePurDetailStatus = (data) => createAPI(`/supplier/updatePurDetailStatus`, 'post', data)

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

@ -14,13 +14,18 @@
<el-input v-model="searchData.sku" clearable style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="Status">
<el-input v-model="searchData.status" clearable style="width: 100px"></el-input>
<el-select v-model="searchData.status" placeholder="请选择" style="width:100px" clearable>
<el-option label="全部" value=""></el-option>
<el-option label="已下达" value="已下达"></el-option>
<el-option label="已取消" value="已取消"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" style="margin-top:10px ">
<el-form-item>
<el-button type="primary" @click="getDataList()">查询</el-button>
<el-button type="primary" @click="getDataList()" v-if="!editMode">查询</el-button>
<el-button type="primary" style="margin-left: 2px" @click="toggleEditMode">
{{ editMode ? '确定' : '编辑' }}
</el-button>
@ -29,7 +34,7 @@
<el-table
ref="poTable"
:height="height"
:data="dataList"
:data="masterRows"
border
highlight-current-row
style="width: 100%;"
@ -46,20 +51,42 @@
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<template v-if="editMode && item.editAble && item.columnProp==='XXX'">
<el-input
v-model="scope.row[item.columnProp]"
@click="getBaseList(1100)"
type="button"
<template v-if="editMode && item.editAble && item.columnProp==='supplierName'">
<el-select
v-model="rowSupplierNo[scope.row.id]"
size="mini"
>
</el-input>
style="width: 100%"
clearable
filterable
placeholder="请选择供应商"
@change="(val) => handleSupplierChange(scope.row, val)">
<el-option
v-for="opt in supplierOptions"
:key="String(opt.value)"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</template>
<template v-else-if="editMode && item.editAble && item.columnProp==='XXXX'">
<span style="color: #c0c4cc"></span>
<template v-else-if="editMode && item.editAble && item.columnProp==='partNo'">
<el-select
v-model="rowPartNo[scope.row.id]"
size="mini"
style="width: 100%"
clearable
filterable
placeholder="请选择物料"
@change="(val) => handlePartNoChange(scope.row, val)">
<el-option
v-for="opt in poPartNoOptions"
:key="String(opt.value)"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</template>
<template v-else-if="editMode && item.editAble">
<!-- 下拉框 -->
<el-select
v-if="item.editType === 'select'"
v-model="scope.row[item.columnProp]"
@ -74,6 +101,7 @@
:value="opt.value">
</el-option>
</el-select>
<!-- 数字输入框 -->
<el-input
v-else-if="item.editType === 'num'"
v-model="scope.row[item.columnProp]"
@ -81,12 +109,35 @@
size="mini"
@change="onCellChange(scope.row)">
</el-input>
<!-- 时间控件 -->
<el-date-picker
v-else-if="item.editType === 'date'"
v-model="scope.row[item.columnProp]"
type="date"
size="mini"
style="width: 100%"
value-format="yyyy-MM-dd"
placeholder="选择日期"
@change="onCellChange(scope.row)">
</el-date-picker>
<el-date-picker
v-else-if="item.editType === 'datetime'"
v-model="scope.row[item.columnProp]"
type="datetime"
size="mini"
style="width: 100%"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期时间"
@change="onCellChange(scope.row)">
</el-date-picker>
<!-- 普通文本输入框 -->
<el-input
v-else
v-model="scope.row[item.columnProp]"
size="mini"
@change="onCellChange(scope.row)">
</el-input>
</template>
<span v-else>{{ scope.row[item.columnProp] }}</span>
</template>
@ -106,66 +157,9 @@
</template>
<script>
// PO
function buildMockRows () {
return [
{
_rowId: 'PO-001',
customer: 'ACME Corp', buyer: 'Zhang', vendorName: 'East Steel', vShortOffice: 'SH', vShortNpc: 'NPC01',
poNo: 'PO2026-0001', item: '10', category: 'Raw', sku: 'SKU-A1001', unitPrice: '12.50', pQty: '1000', pValue: '12500.00',
aQty: '800', aValue: '10000.00', pDeparture: 'Shanghai', pDestination: 'Chicago', sMethod: 'SEA',
dIssue: '2026-01-05', dEnquiry: '2026-01-02', status: 'Open', dConfirmed: '2026-01-08', dNeed: '2026-03-01',
dNarrival: '2026-03-15', dCrd: '2026-03-10', dInspection: '2026-03-18', aCrd: '2026-03-12', eta: '2026-03-14',
flexid: 'FX-77821', aObd: '2026-02-20', docSent: 'Y', telexRelease: 'N', advancePayment: '30%', advancePaid: 'Y',
dCreate: '2026-01-01', mPlanner: 'Wang', dEdit: '2026-01-10', ePlanner: 'Liu', remarkDelay: '', comments: '首单',
changeFlag: 0
},
{
_rowId: 'PO-002',
customer: 'Globex', buyer: 'Li', vendorName: 'South Pack', vShortOffice: 'GZ', vShortNpc: 'NPC02',
poNo: 'PO2026-0002', item: '20', category: 'PKG', sku: 'SKU-B2002', unitPrice: '0.85', pQty: '50000', pValue: '42500.00',
aQty: '50000', aValue: '42500.00', pDeparture: 'Shenzhen', pDestination: 'Rotterdam', sMethod: 'AIR',
dIssue: '2026-02-01', dEnquiry: '2026-01-28', status: 'Confirmed', dConfirmed: '2026-02-03', dNeed: '2026-04-01',
dNarrival: '2026-04-10', dCrd: '2026-04-05', dInspection: '2026-04-12', aCrd: '2026-04-06', eta: '2026-04-09',
flexid: 'FX-88102', aObd: '2026-03-25', docSent: 'Y', telexRelease: 'Y', advancePayment: '20%', advancePaid: 'Y',
dCreate: '2026-01-25', mPlanner: 'Chen', dEdit: '2026-02-05', ePlanner: 'Zhao', remarkDelay: '', comments: '',
changeFlag: 0
},
{
_rowId: 'PO-003',
customer: 'Initech', buyer: 'Wang', vendorName: 'North Chem', vShortOffice: 'TJ', vShortNpc: 'NPC03',
poNo: 'PO2026-0003', item: '5', category: 'Chem', sku: 'SKU-C3003', unitPrice: '45.00', pQty: '200', pValue: '9000.00',
aQty: '0', aValue: '0.00', pDeparture: 'Tianjin', pDestination: 'Hamburg', sMethod: 'SEA',
dIssue: '2026-03-01', dEnquiry: '2026-02-26', status: 'Pending', dConfirmed: '', dNeed: '2026-05-01',
dNarrival: '', dCrd: '2026-05-15', dInspection: '', aCrd: '', eta: '',
flexid: 'FX-99001', aObd: '', docSent: 'N', telexRelease: 'N', advancePayment: '10%', advancePaid: 'N',
dCreate: '2026-02-20', mPlanner: 'Sun', dEdit: '', ePlanner: 'Sun', remarkDelay: '原料审批慢', comments: '等放行',
changeFlag: 0
},
{
_rowId: 'PO-004',
customer: 'Umbrella', buyer: 'Liu', vendorName: 'West Elec', vShortOffice: 'CD', vShortNpc: 'NPC04',
poNo: 'PO2026-0004', item: '1', category: 'Elec', sku: 'SKU-D4004', unitPrice: '128.00', pQty: '500', pValue: '64000.00',
aQty: '500', aValue: '64000.00', pDeparture: 'Chengdu', pDestination: 'LA', sMethod: 'AIR',
dIssue: '2026-02-15', dEnquiry: '2026-02-12', status: 'Closed', dConfirmed: '2026-02-18', dNeed: '2026-03-20',
dNarrival: '2026-03-22', dCrd: '2026-03-19', dInspection: '2026-03-23', aCrd: '2026-03-19', eta: '2026-03-21',
flexid: 'FX-11223', aObd: '2026-03-01', docSent: 'Y', telexRelease: 'Y', advancePayment: '0%', advancePaid: 'Y',
dCreate: '2026-02-10', mPlanner: 'Qian', dEdit: '2026-02-28', ePlanner: 'Qian', remarkDelay: '', comments: '已结单',
changeFlag: 0
},
{
_rowId: 'PO-005',
customer: 'Stark Ind', buyer: 'Zhou', vendorName: 'Prime Mfg', vShortOffice: 'NB', vShortNpc: 'NPC05',
poNo: 'PO2026-0005', item: '8', category: 'Mfg', sku: 'SKU-E5005', unitPrice: '6.20', pQty: '8000', pValue: '49600.00',
aQty: '3200', aValue: '19840.00', pDeparture: 'Ningbo', pDestination: 'Sydney', sMethod: 'SEA',
dIssue: '2026-04-01', dEnquiry: '2026-03-28', status: 'Partial', dConfirmed: '2026-04-02', dNeed: '2026-06-01',
dNarrival: '2026-06-10', dCrd: '2026-06-05', dInspection: '2026-06-12', aCrd: '', eta: '2026-06-08',
flexid: 'FX-55667', aObd: '2026-05-15', docSent: 'Y', telexRelease: 'N', advancePayment: '25%', advancePaid: 'Y',
dCreate: '2026-03-15', mPlanner: 'Wu', dEdit: '2026-04-05', ePlanner: 'Wu', remarkDelay: '分批出运', comments: '',
changeFlag: 0
}
]
}
import { searchPoDetailPage, batchUpdatePoDetail } from '@/api/order/poOrder.js'
import { getPartList } from '@/api/part/partInfo.js'
import { checkSrmSupplierList } from '@/api/srm/srmSupplier.js'
export default {
name: 'PoOrder',
@ -176,25 +170,20 @@ export default {
* 需要单独写编辑 UI columnProp 填在这里才会走模板里自定义分支不在此数组的仍用默认 select/num/text - rqrq
* 示例['mPlanner', 'comments']
*/
rowPartNo: {}, //
rowSupplierNo: {}, //
poPartNoOptions: [],
supplierOptions: [],
customEditColumnProps: [],
currentRow: null,
// select selectOptionsKey selectOptions - rqrq
columnSelectOptions: {
poStatusOptions: [
{ label: 'Open', value: 'Open' },
{ label: 'Pending', value: 'Pending' },
{ label: 'Confirmed', value: 'Confirmed' },
{ label: 'Partial', value: 'Partial' },
{ label: 'Closed', value: 'Closed' }
],
poCategoryOptions: [
{ label: '原材料', value: 'Raw' },
{ label: '包装', value: 'PKG' },
{ label: '化工', value: 'Chem' },
{ label: '电子', value: 'Elec' },
{ label: '制造件', value: 'Mfg' }
{ label: '已下达', value: '已下达' },
{ label: '已取消', value: '已取消' }
],
poPartNoOptions: [],
transportOptions: [
{ label: '海运 SEA', value: 'SEA' },
{ label: '空运 AIR', value: 'AIR' },
@ -206,13 +195,12 @@ export default {
]
},
searchData: {
site: this.$store.state.user.site,
customer: '',
buyer: '',
poNo: '',
sku: '',
status: '',
page: 1,
limit: 20
status: ''
},
height: 200,
pageIndex: 1,
@ -273,7 +261,7 @@ export default {
serialNumber: '812003Table1VendorName',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'vendorName',
columnProp: 'supplierName',
headerAlign: 'center',
align: 'center',
columnLabel: 'Vendor Name',
@ -285,9 +273,9 @@ export default {
fixed: '',
columnWidth: 120,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
selectOptionsKey: '',
editAble: true,
editType: 'select',
selectOptionsKey: 'supplierOptions',
selectOptions: null
},
{
@ -296,7 +284,7 @@ export default {
serialNumber: '812003Table1VShortOffice',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'vShortOffice',
columnProp: 'shortOffice',
headerAlign: 'center',
align: 'center',
columnLabel: 'V_Short_Office',
@ -319,7 +307,7 @@ export default {
serialNumber: '812003Table1VShortNpc',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'vShortNpc',
columnProp: 'shortNpc',
headerAlign: 'center',
align: 'center',
columnLabel: 'V_Short_NPC',
@ -354,7 +342,7 @@ export default {
fixed: '',
columnWidth: 120,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -377,10 +365,33 @@ export default {
fixed: '',
columnWidth: 70,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
},
{
userId: this.$store.state.user.name,
functionId: 812003,
serialNumber: '812003Table1PartNo',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'partNo',
headerAlign: 'center',
align: 'center',
columnLabel: 'Part_No',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 90,
showOverflowTooltip: true,
editAble: true,
editType: 'select',
selectOptionsKey: 'poPartNoOptions',
selectOptions: null
},
{
userId: this.$store.state.user.name,
@ -400,9 +411,9 @@ export default {
fixed: '',
columnWidth: 90,
showOverflowTooltip: true,
editAble: true,
editType: 'select',
selectOptionsKey: 'poCategoryOptions',
editAble: false,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
},
{
@ -434,7 +445,7 @@ export default {
serialNumber: '812003Table1UnitPrice',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'unitPrice',
columnProp: 'price',
headerAlign: 'center',
align: 'center',
columnLabel: 'Unit_Price',
@ -457,7 +468,7 @@ export default {
serialNumber: '812003Table1PQty',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'pQty',
columnProp: 'qty',
headerAlign: 'center',
align: 'center',
columnLabel: 'P_Qty',
@ -480,7 +491,7 @@ export default {
serialNumber: '812003Table1PValue',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'pValue',
columnProp: 'value',
headerAlign: 'center',
align: 'center',
columnLabel: 'P_Value',
@ -492,7 +503,7 @@ export default {
fixed: '',
columnWidth: 90,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -503,7 +514,7 @@ export default {
serialNumber: '812003Table1AQty',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'aQty',
columnProp: 'shipQty',
headerAlign: 'center',
align: 'center',
columnLabel: 'A_Qty',
@ -515,7 +526,7 @@ export default {
fixed: '',
columnWidth: 80,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -526,7 +537,7 @@ export default {
serialNumber: '812003Table1AValue',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'aValue',
columnProp: 'sumPrice',
headerAlign: 'center',
align: 'center',
columnLabel: 'A_Value',
@ -538,7 +549,7 @@ export default {
fixed: '',
columnWidth: 90,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -549,7 +560,7 @@ export default {
serialNumber: '812003Table1PDeparture',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'pDeparture',
columnProp: 'departure',
headerAlign: 'center',
align: 'center',
columnLabel: 'P_Departure',
@ -561,7 +572,7 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -572,7 +583,7 @@ export default {
serialNumber: '812003Table1PDestination',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'pDestination',
columnProp: 'destination',
headerAlign: 'center',
align: 'center',
columnLabel: 'P_Destination',
@ -584,7 +595,7 @@ export default {
fixed: '',
columnWidth: 110,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -595,7 +606,7 @@ export default {
serialNumber: '812003Table1SMethod',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'sMethod',
columnProp: 'shipVia',
headerAlign: 'center',
align: 'center',
columnLabel: 'S_Method',
@ -618,7 +629,7 @@ export default {
serialNumber: '812003Table1DIssue',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dIssue',
columnProp: 'orderDate',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Issue',
@ -630,8 +641,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -641,7 +652,7 @@ export default {
serialNumber: '812003Table1DEnquiry',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dEnquiry',
columnProp: 'enquiry',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Enquiry',
@ -653,8 +664,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -687,7 +698,7 @@ export default {
serialNumber: '812003Table1DConfirmed',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dConfirmed',
columnProp: 'confirmed',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Confirmed',
@ -699,8 +710,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -710,7 +721,7 @@ export default {
serialNumber: '812003Table1DNeed',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dNeed',
columnProp: 'wantReceiveDate',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Need',
@ -722,8 +733,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -733,7 +744,7 @@ export default {
serialNumber: '812003Table1DNarrival',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dNarrival',
columnProp: 'narrival',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Narrival',
@ -745,8 +756,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -756,7 +767,7 @@ export default {
serialNumber: '812003Table1DCrd',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dCrd',
columnProp: 'crd',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_CRD',
@ -768,8 +779,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -779,7 +790,7 @@ export default {
serialNumber: '812003Table1DInspection',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dInspection',
columnProp: 'inspection',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Inspection',
@ -791,8 +802,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -802,7 +813,7 @@ export default {
serialNumber: '812003Table1ACrd',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'aCrd',
columnProp: 'crd',
headerAlign: 'center',
align: 'center',
columnLabel: 'A_CRD',
@ -814,8 +825,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -837,8 +848,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -860,7 +871,7 @@ export default {
fixed: '',
columnWidth: 90,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -871,7 +882,7 @@ export default {
serialNumber: '812003Table1AObd',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'aObd',
columnProp: 'obd',
headerAlign: 'center',
align: 'center',
columnLabel: 'A_OBD',
@ -883,8 +894,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -952,7 +963,7 @@ export default {
fixed: '',
columnWidth: 120,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -986,7 +997,7 @@ export default {
serialNumber: '812003Table1DCreate',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dCreate',
columnProp: 'createTime',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Create',
@ -998,8 +1009,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -1009,7 +1020,7 @@ export default {
serialNumber: '812003Table1MPlanner',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'mPlanner',
columnProp: 'planner',
headerAlign: 'center',
align: 'center',
columnLabel: 'M_Planner',
@ -1032,7 +1043,7 @@ export default {
serialNumber: '812003Table1DEdit',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'dEdit',
columnProp: 'edit',
headerAlign: 'center',
align: 'center',
columnLabel: 'D_Edit',
@ -1044,8 +1055,8 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editType: 'text',
editAble: true,
editType: 'date',
selectOptionsKey: '',
selectOptions: null
},
@ -1055,7 +1066,7 @@ export default {
serialNumber: '812003Table1EPlanner',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'ePlanner',
columnProp: 'endPlanner',
headerAlign: 'center',
align: 'center',
columnLabel: 'E_Planner',
@ -1067,7 +1078,7 @@ export default {
fixed: '',
columnWidth: 100,
showOverflowTooltip: true,
editAble: false,
editAble: true,
editType: 'text',
selectOptionsKey: '',
selectOptions: null
@ -1101,7 +1112,7 @@ export default {
serialNumber: '812003Table1Comments',
tableId: '812003Table1',
tableName: 'PO Order',
columnProp: 'comments',
columnProp: 'remark',
headerAlign: 'center',
align: 'center',
columnLabel: 'Comments',
@ -1127,8 +1138,9 @@ export default {
}
},
created () {
this.resetMasterFromSeed()
this.getDataList()
},
mounted () {
this.$nextTick(() => {
@ -1160,28 +1172,34 @@ export default {
}
return []
},
resetMasterFromSeed () {
this.masterRows = buildMockRows().map(r => ({ ...r, changeFlag: 0 }))
},
getDataList() {
this.searchData.limit = this.pageSize
this.searchData.page = this.pageIndex
const f = this.searchData
const contains = (val, q) => {
if (!q) return true
return String(val == null ? '' : val).toLowerCase().includes(String(q).trim().toLowerCase())
this.loading = true
const params = {
...this.searchData,
page: this.pageIndex,
limit: this.pageSize
}
const filtered = this.masterRows.filter(row => {
if (!contains(row.customer, f.customer)) return false
if (!contains(row.buyer, f.buyer)) return false
if (!contains(row.poNo, f.poNo)) return false
if (!contains(row.sku, f.sku)) return false
if (!contains(row.status, f.status)) return false
return true
searchPoDetailPage(params).then(({ data }) => {
if (data.code === 0) {
this.dataList = data.page.list
// dataList masterRows changeFlag
this.masterRows = this.dataList.map(row => ({
...row,
changeFlag: 0 //
}))
this.initRowEditValues()
this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount
} else {
this.$message.error((data && data.msg) || '获取列表失败')
}
this.loading = false
}).catch(() => {
this.loading = false
this.$message.error('请求失败')
})
this.totalPage = filtered.length
const start = (this.pageIndex - 1) * this.pageSize
this.dataList = filtered.slice(start, start + this.pageSize)
},
sizeChangeHandle (val) {
this.pageSize = val
@ -1195,25 +1213,160 @@ export default {
onCellChange (row) {
this.$set(row, 'changeFlag', 1)
},
handleSupplierChange(row, supplierNo) {
console.log('供应商变更:', supplierNo, '行ID:', row.id)
const selectedOption = this.supplierOptions.find(opt => opt.value === supplierNo)
if (selectedOption) {
this.$set(row, 'supplierName', selectedOption.label)
this.$set(row, 'supplierNo', selectedOption.value)
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) {
console.log('物料变更:', partNo, '行ID:', row.id)
// partNo
const selectedOption = this.poPartNoOptions.find(opt => opt.value === partNo)
if (selectedOption) {
//
this.$set(row, 'partNo', selectedOption.label)
// category sku
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, '')
}
},
toggleEditMode () {
if (!this.editMode) {
this.editMode = true
this.initRowEditValues()
this.getSupplierOptions()
this.getPartNoOptions()
return
}
const changed = this.masterRows.filter(r => r.changeFlag === 1)
changed.forEach(r => {
this.$set(r, 'changeFlag', 0)
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(
{
site: this.$store.state.user.site
}
).then(({data}) => {
if (data && data.code === 0) {
console.log('接口返回的rows:', data.rows) //
this.poPartNoOptions = (data.rows || []).map(item => ({
label: item.partNo,
value: item.partNo,
partNo: item.partNo,
category: item.category,
sku: item.sku
}))
} else {
this.$message.error(data.msg || '操作失败')
}
}).catch(error => {
this.$message.error('操作失败: ' + error.message)
})
},
getSupplierOptions(){
console.log('获取供应商选项')
checkSrmSupplierList(
{
site: this.$store.state.user.site
}
).then(({data}) => {
if (data && data.code === 0) {
console.log('接口返回的rows:', data.rows) //
this.supplierOptions = (data.rows || []).map(item => ({
label: item.supplierName,
value: item.supplierNo,
supplierNo: item.supplierNo,
supplierName: item.supplierName,
shortOffice: item.cshortOffice,
shortNpc: item.cshortNpc
}))
} else {
this.$message.error(data.msg || '操作失败')
}
}).catch(error => {
this.$message.error('操作失败: ' + error.message)
})
},
//
batchUpdatePoOrder(changed) {
//
const updateData = changed.map(row => ({
id: row.id,
...row
}))
//
batchUpdatePoDetail(updateData)
.then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: changed.length
? `已提交 ${changed.length} 行变更`
: '无变更行',
message: `已提交 ${updateData.length} 行变更`,
type: 'success',
duration: 2000
})
changed.forEach(r => {
this.$set(r, 'changeFlag', 0)
})
this.editMode = false
this.getDataList()
} else {
this.$message.error(data.msg || '操作失败')
}
})
.catch(error => {
this.$message.error('操作失败: ' + error.message)
})
}
}
}
</script>

408
src/views/modules/port/portInfo.vue

@ -0,0 +1,408 @@
<!-- 港口管理界面 -->
<template>
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-row>
<el-col :span="24">
<el-form-item label="港口编码:">
<el-input v-model="searchData.portCode" style="width: 150px" clearable placeholder="请输入港口编码"></el-input>
</el-form-item>
<el-form-item label="港口名称:">
<el-input v-model="searchData.portName" style="width: 150px" clearable placeholder="请输入港口名称"></el-input>
</el-form-item>
<el-form-item label=" ">
<el-button class="customer-bun-min" type="primary" @click="getMainData">查询</el-button>
<el-button @click="resetSearch" style="margin-left: 2px">重置</el-button>
<el-button type="primary" @click="openAddDialog">新增</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 港口列表 -->
<el-table
:height="height"
:data="mainDataList"
border
ref="mainTable"
highlight-current-row
@row-click="changeData"
v-loading="dataListLoading"
style="margin-top: 0px; width: 100%;">
<el-table-column
v-for="(item, index) in columnArray1"
:key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
</template>
</el-table-column>
<!-- 操作列 -->
<el-table-column
fixed="right"
header-align="center"
align="center"
width="180"
label="操作">
<template slot-scope="scope">
<el-link style="cursor: pointer; margin-right: 10px;" @click="openEditDialog(scope.row)">编辑</el-link>
<el-link style="cursor: pointer; color: #F56C6C;" @click="deletePort(scope.row)">删除</el-link>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
style="margin-top: 0px"
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[20, 50, 100, 200]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 运输周期标签页 -->
<el-tabs v-model="activeName" style="margin-top: 0px; width: 99%;" @tab-click="tabClick" class="customer-tab" type="border-card">
<el-tab-pane label="运输周期列表" name="transitList">
<transitList ref="subDataList" :height="tabHeight"></transitList>
</el-tab-pane>
</el-tabs>
<!-- 港口新增/编辑弹出框 -->
<el-dialog
:title="dialogTitle"
:visible.sync="portDialogVisible"
width="500px"
top="3vh"
:close-on-click-modal="false"
class="part-dialog">
<div class="dialog-content">
<el-form
:model="portForm"
:rules="portRules"
ref="portForm"
label-position="top"
class="part-form">
<el-form-item label="港口编码" prop="portCode">
<el-input v-model="portForm.portCode" :disabled="dialogType === 'edit'" placeholder="请输入港口编码"></el-input>
</el-form-item>
<el-form-item label="港口名称" prop="portName">
<el-input v-model="portForm.portName" placeholder="请输入港口名称"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="portForm.remark" type="textarea" :rows="1" placeholder="请输入备注"></el-input>
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer" style="margin-top: 20px; text-align: center;">
<el-button type="primary" @click="submitPort">提交</el-button>
<el-button @click="portDialogVisible = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
// ============ API ============
import {
searchPortPage, //
createPort, //
updatePort, //
deletePort //
} from '@/api/port/portInfo.js'
// ============ ============
import transitList from './portTransit.vue'
export default {
name: 'PortManagement',
components: {
transitList
},
data() {
return {
//
height: 200,
tabHeight: 300,
//
dataListLoading: false,
//
mainDataList: [],
//
subDataLoading: false,
//
subDataList: [],
//
pageIndex: 1,
pageSize: 20,
totalPage: 0,
//
activeName: 'transitList',
//
currentRow: {},
//
searchData: {
portCode: '',
portName: '',
page: 1,
limit: 20
},
//
columnArray1: [
{ columnProp: 'portCode', columnLabel: '港口编码', columnWidth: '120', headerAlign: 'center', align: 'center', fixed: false, columnHidden: false, columnSortable: false, showOverflowTooltip: true },
{ columnProp: 'portName', columnLabel: '港口名称', columnWidth: '180', headerAlign: 'center', align: 'center', fixed: false, columnHidden: false, columnSortable: false, showOverflowTooltip: true },
{ columnProp: 'remark', columnLabel: '备注', columnWidth: '200', headerAlign: 'center', align: 'left', fixed: false, columnHidden: false, columnSortable: false, showOverflowTooltip: true },
{ columnProp: 'createdBy', columnLabel: '创建人', columnWidth: '100', headerAlign: 'center', align: 'center', fixed: false, columnHidden: false, columnSortable: false, showOverflowTooltip: true },
{ columnProp: 'createdTime', columnLabel: '创建时间', columnWidth: '160', headerAlign: 'center', align: 'center', fixed: false, columnHidden: false, columnSortable: false, showOverflowTooltip: true }
],
// ========== ==========
portDialogVisible: false,
dialogType: 'add', // add: , edit:
dialogTitle: '新增港口',
portForm: {
portCode: '',
portName: '',
remark: ''
},
portRules: {
portCode: [{ required: true, message: '请输入港口编码', trigger: 'blur' }],
portName: [{ required: true, message: '请输入港口名称', trigger: 'blur' }]
},
// ========== ==========
transitDialogVisible: false,
transitDialogType: 'add', // add: , edit:
transitDialogTitle: '新增运输周期',
transitForm: {
id: '',
portCode: '',
departure: '',
destination: '',
transitDays: 0,
remark: ''
},
transitRules: {
departure: [{ required: true, message: '请输入始发港', trigger: 'blur' }],
destination: [{ required: true, message: '请输入目的港', trigger: 'blur' }],
transitDays: [{ required: true, message: '请输入停留天数', trigger: 'blur' }]
}
}
},
created() {
this.getMainData()
},
mounted() {
this.$nextTick(() => {
this.calcHeight()
})
window.addEventListener('resize', this.handleResize)
},
beforeDestroy() {
window.removeEventListener('resize', this.handleResize)
},
methods: {
//
calcHeight() {
this.height = (window.innerHeight - 280) / 2
this.tabHeight = this.height - 50
},
handleResize() {
this.calcHeight()
this.refreshCurrentSubTable()
},
//
resetSearch() {
this.searchData = {
portCode: '',
portName: '',
page: 1,
limit: this.pageSize
}
this.getMainData()
},
// ========== ==========
//
getMainData() {
this.dataListLoading = true
this.searchData.limit = this.pageSize
this.searchData.page = this.pageIndex
searchPortPage(this.searchData).then(({ data }) => {
if (data.code === 0) {
this.mainDataList = data.page.list || []
this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount
if (this.mainDataList.length > 0) {
this.$refs.mainTable.setCurrentRow(this.mainDataList[0])
this.changeData(this.mainDataList[0])
} else {
this.changeData(null)
}
} else {
this.$message.error(data.msg || '查询失败')
}
this.dataListLoading = false
}).catch(() => {
this.dataListLoading = false
})
},
//
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getMainData()
},
//
currentChangeHandle(val) {
this.pageIndex = val
this.getMainData()
},
//
changeData(row) {
this.currentRow = row ? JSON.parse(JSON.stringify(row)) : { portCode: '' }
this.refreshCurrentSubTable()
},
//
openAddDialog() {
this.dialogType = 'add'
this.dialogTitle = '新增港口'
this.portForm = {
createBy: this.$store.state.user.name,
portCode: '',
portName: '',
remark: ''
}
this.portDialogVisible = true
this.$nextTick(() => {
if (this.$refs.portForm) {
this.$refs.portForm.clearValidate()
}
})
},
//
openEditDialog(row) {
this.dialogType = 'edit'
this.dialogTitle = '编辑港口'
this.portForm = {
portCode: row.portCode,
portName: row.portName,
remark: row.remark || ''
}
this.portDialogVisible = true
this.$nextTick(() => {
if (this.$refs.portForm) {
this.$refs.portForm.clearValidate()
}
})
},
//
submitPort() {
this.$refs.portForm.validate((valid) => {
if (valid) {
const apiMethod = this.dialogType === 'add' ? createPort : updatePort
apiMethod(this.portForm).then(({ data }) => {
if (data.code === 0) {
this.$message.success(this.dialogType === 'add' ? '新增成功' : '编辑成功')
this.portDialogVisible = false
this.getMainData()
} else {
this.$message.error(data.msg || '操作失败')
}
}).catch(error => {
this.$message.error('操作失败: ' + error.message)
})
} else {
this.$message.warning('请填写必填字段')
}
})
},
//
deletePort(row) {
this.$confirm(`确定删除港口 "${row.portCode} - ${row.portName}" 吗?删除后该港口的运输周期数据也会被删除。`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deletePort({ portCode: row.portCode }).then(({ data }) => {
if (data.code === 0) {
this.$message.success('删除成功')
this.getMainData()
} else {
this.$message.error(data.msg || '删除失败')
}
}).catch(error => {
this.$message.error('删除失败: ' + error.message)
})
}).catch(() => {})
},
// ========== ==========
//
refreshCurrentSubTable() {
if (this.activeName === 'transitList') {
this.getTransitList()
}
},
//
getTransitList(){
let inData = {
site: this.currentRow.site,
portId: this.currentRow.id,
portCode: this.currentRow.portCode,
height: this.tabHeight
}
this.$refs.subDataList.init(inData)
},
//
tabClick() {
this.refreshCurrentSubTable()
}
}
}
</script>
<style scoped lang="scss">
//
.customer-css {
.el-link--danger {
color: #F56C6C;
}
}
</style>

236
src/views/modules/port/portTransit.vue

@ -0,0 +1,236 @@
<template>
<div class="customer-css">
<el-form :inline="true" label-position="top" :model="searchData">
<el-form-item label="始发港">
<el-input v-model="searchData.departure" clearable style="width: 150px"></el-input>
</el-form-item>
<el-form-item label="目的港">
<el-input v-model="searchData.destination" clearable style="width: 150px"></el-input>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" @click="searchTable()">查询</el-button>
<el-button type="primary" @click="addModal()" v-if="shouldShowButton">新增</el-button>
</el-form-item>
</el-form>
<el-table
:data="dataList"
:height="searchData.height"
border
v-loading="dataListLoading"
style="width: 100%;">
<el-table-column
v-for="(item, index) in columnList"
:key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed == '' ? false : item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
</template>
</el-table-column>
<el-table-column
header-align="center"
align="center"
width="180"
fixed="right"
label="Actions">
<template slot-scope="scope">
<a type="text" size="small" @click="editModel(scope.row)">Edit |</a>
<a type="text" size="small" @click="deleteData(scope.row)"> Delete</a>
</template>
</el-table-column>
</el-table>
<!-- 新增/编辑弹窗 -->
<el-dialog :title="dialogTitle" :close-on-click-modal="false" v-drag :visible.sync="dialogVisible" width="600px">
<div class="dialog-content">
<el-form label-position="top" :model="formData" :rules="formRules" ref="formRef">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="始发港" prop="departure">
<el-input v-model="formData.departure" placeholder="请输入始发港"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="目的港" prop="destination">
<el-input v-model="formData.destination" placeholder="请输入目的港"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="停留天数" prop="transitDays">
<el-input v-model="formData.transitDays" type="number" placeholder="请输入停留天数"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div slot="footer" class="dialog-footer" style="margin-top: 20px">
<el-button type="primary" @click="submitData()">保存</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
// API
import {
searchTransitPage, //
searchTransitList, //
createTransit, //
updateTransit, //
deleteTransit //
} from '@/api/port/portTransit.js'
export default {
name: 'PortTransitList',
data() {
return {
dataList: [],
dataListLoading: false,
searchData: {
departure: '',
destination: '',
portId: '',
portCode: '',
height: '200',
page: 1,
limit: 1000
},
dialogVisible: false,
dialogTitle: '新增港口运输周期',
formData: {
id: '',
departure: '',
destination: '',
transitDays: ''
},
formRules: {
departure: [{ required: true, message: '请输入始发港', trigger: 'blur' }],
destination: [{ required: true, message: '请输入目的港', trigger: 'blur' }],
transitDays: [{ required: true, message: '请输入停留天数', trigger: 'blur' }]
},
columnList: [
{ columnProp: 'departure', headerAlign: 'center', align: 'left', columnLabel: '始发港', columnWidth: 150, fixed: '', columnHidden: false, columnSortable: false },
{ columnProp: 'destination', headerAlign: 'center', align: 'left', columnLabel: '目的港', columnWidth: 150, fixed: '', columnHidden: false, columnSortable: false },
{ columnProp: 'transitDays', headerAlign: 'center', align: 'center', columnLabel: '停留天数', columnWidth: 120, fixed: '', columnHidden: false, columnSortable: true }
]
}
},
computed: {
shouldShowButton() {
return true
}
},
methods: {
//
init(inData) {
if (inData) {
this.searchData = { ...this.searchData, ...inData }
}
this.searchTable()
},
//
searchTable() {
this.dataListLoading = true
searchTransitPage(this.searchData).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.rows
} else {
this.dataList = []
}
this.dataListLoading = false
}).catch(() => {
this.dataListLoading = false
})
},
//
addModal() {
this.dialogTitle = '新增港口运输周期'
this.formData = {
id: '',
portId: this.searchData.portId || '',
departure: '',
destination: '',
transitDays: ''
}
this.dialogVisible = true
this.$nextTick(() => {
if (this.$refs.formRef) {
this.$refs.formRef.clearValidate()
}
})
},
//
editModel(row) {
this.dialogTitle = '编辑港口运输周期'
this.formData = JSON.parse(JSON.stringify(row))
this.dialogVisible = true
this.$nextTick(() => {
if (this.$refs.formRef) {
this.$refs.formRef.clearValidate()
}
})
},
//
submitData() {
this.$refs.formRef.validate((valid) => {
if (!valid) return
const api = this.formData.id ? updateTransit : createTransit
api(this.formData).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '保存成功')
this.dialogVisible = false
this.searchTable()
} else {
this.$message.warning(data.msg || '保存失败')
}
}).catch(() => {
this.$message.error('保存失败')
})
})
},
//
deleteData(row) {
this.$confirm('确认删除该条港口运输周期记录吗?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteTransit(row.id).then(({ data }) => {
if (data.code === 0) {
this.$message.success('删除成功')
this.searchTable()
} else {
this.$message.warning(data.msg || '删除失败')
}
}).catch(() => {
this.$message.error('删除失败')
})
}).catch(() => {})
}
}
}
</script>
<style scoped lang="scss">
.dialog-content {
width: 100%;
max-height: 60vh;
overflow-y: auto;
padding-right: 10px;
}
.customer-css {
padding: 10px;
}
</style>
Loading…
Cancel
Save