You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1379 lines
41 KiB
1379 lines
41 KiB
<template>
|
|
<div class="mod-config">
|
|
<el-form :inline="true" label-position="top" :model="searchData">
|
|
<el-form-item label="Customer">
|
|
<el-input v-model="searchData.customer" clearable style="width: 120px"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="Buyer">
|
|
<el-input v-model="searchData.buyer" clearable style="width: 120px"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="PO No">
|
|
<el-input v-model="searchData.poNo" clearable style="width: 140px"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="SKU">
|
|
<el-input v-model="searchData.sku" clearable style="width: 120px"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="Status">
|
|
<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()" v-if="!editMode">查询</el-button>
|
|
<el-button type="primary" style="margin-left: 2px" @click="toggleEditMode">
|
|
{{ editMode ? '确定' : '编辑' }}
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
<el-table
|
|
ref="poTable"
|
|
:height="height"
|
|
:data="masterRows"
|
|
border
|
|
highlight-current-row
|
|
style="width: 100%;"
|
|
@current-change="onTableCurrentChange">
|
|
<el-table-column
|
|
v-for="(item, index) in visibleColumns"
|
|
:key="item.serialNumber || index"
|
|
:sortable="item.columnSortable"
|
|
:prop="item.columnProp"
|
|
:header-align="item.headerAlign"
|
|
:show-overflow-tooltip="item.showOverflowTooltip && (!editMode || !item.editAble)"
|
|
:align="item.align"
|
|
:fixed="item.fixed === '' ? false : item.fixed"
|
|
:min-width="item.columnWidth"
|
|
:label="item.columnLabel">
|
|
<template slot-scope="scope">
|
|
<template v-if="editMode && item.editAble && item.columnProp==='supplierName'">
|
|
<el-select
|
|
v-model="rowSupplierNo[scope.row.id]"
|
|
size="mini"
|
|
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==='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]"
|
|
size="mini"
|
|
style="width: 100%"
|
|
clearable
|
|
@change="onCellChange(scope.row)">
|
|
<el-option
|
|
v-for="opt in getSelectOptionsForColumn(item)"
|
|
:key="String(opt.value)"
|
|
:label="opt.label"
|
|
:value="opt.value">
|
|
</el-option>
|
|
</el-select>
|
|
<!-- 数字输入框 -->
|
|
<el-input
|
|
v-else-if="item.editType === 'num'"
|
|
v-model="scope.row[item.columnProp]"
|
|
type="number"
|
|
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>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<el-pagination
|
|
@size-change="sizeChangeHandle"
|
|
@current-change="currentChangeHandle"
|
|
:current-page="pageIndex"
|
|
:page-sizes="[20, 50, 100, 200, 500]"
|
|
:page-size="pageSize"
|
|
:total="totalPage"
|
|
layout="total, sizes, prev, pager, next, jumper">
|
|
</el-pagination>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
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',
|
|
data () {
|
|
return {
|
|
masterRows: [],
|
|
/**
|
|
* 需要单独写编辑 UI 的 columnProp 填在这里,才会走模板里「自定义」分支;不在此数组的仍用默认 select/num/text - rqrq
|
|
* 示例:['mPlanner', 'comments']
|
|
*/
|
|
rowPartNo: {}, //存储每行选中的物料编号
|
|
rowSupplierNo: {}, //存储每行选中的供应商编号
|
|
poPartNoOptions: [],
|
|
supplierOptions: [],
|
|
customEditColumnProps: [],
|
|
|
|
currentRow: null,
|
|
// 各列下拉:select 列通过 selectOptionsKey 指向此处;也可在列定义里写 selectOptions 数组 - rqrq
|
|
columnSelectOptions: {
|
|
poStatusOptions: [
|
|
{ label: '已下达', value: '已下达' },
|
|
{ label: '已取消', value: '已取消' }
|
|
],
|
|
poPartNoOptions: [],
|
|
transportOptions: [
|
|
{ label: '海运 SEA', value: 'SEA' },
|
|
{ label: '空运 AIR', value: 'AIR' },
|
|
{ label: '陆运 ROAD', value: 'ROAD' }
|
|
],
|
|
yesNoOptions: [
|
|
{ label: 'Y', value: 'Y' },
|
|
{ label: 'N', value: 'N' }
|
|
]
|
|
},
|
|
searchData: {
|
|
site: this.$store.state.user.site,
|
|
customer: '',
|
|
buyer: '',
|
|
poNo: '',
|
|
sku: '',
|
|
status: ''
|
|
},
|
|
height: 200,
|
|
pageIndex: 1,
|
|
pageSize: 20,
|
|
totalPage: 0,
|
|
dataList: [],
|
|
editMode: false,
|
|
columnList: [
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Customer',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'customer',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Customer',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: false,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Buyer',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'buyer',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Buyer',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: false,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1VendorName',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'supplierName',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Vendor Name',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'select',
|
|
selectOptionsKey: 'supplierOptions',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1VShortOffice',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'shortOffice',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'V_Short_Office',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 110,
|
|
showOverflowTooltip: true,
|
|
editAble: false,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1VShortNpc',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'shortNpc',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'V_Short_NPC',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: false,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1PoNo',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'poNo',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'PO_No',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Item',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'item',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Item',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 70,
|
|
showOverflowTooltip: true,
|
|
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,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Category',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'category',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Category',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: false,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Sku',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'sku',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'SKU',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: false,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1UnitPrice',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'price',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Unit_Price',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'num',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1PQty',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'qty',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'P_Qty',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'num',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1PValue',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'value',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'P_Value',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1AQty',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'shipQty',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'A_Qty',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1AValue',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'sumPrice',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'A_Value',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1PDeparture',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'departure',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'P_Departure',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1PDestination',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'destination',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'P_Destination',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 110,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1SMethod',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'shipVia',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'S_Method',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'select',
|
|
selectOptionsKey: 'transportOptions',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DIssue',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'orderDate',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Issue',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DEnquiry',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'enquiry',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Enquiry',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Status',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'status',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Status',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 80,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'select',
|
|
selectOptionsKey: 'poStatusOptions',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DConfirmed',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'confirmed',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Confirmed',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DNeed',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'wantReceiveDate',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Need',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DNarrival',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'narrival',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Narrival',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DCrd',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'crd',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_CRD',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DInspection',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'inspection',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Inspection',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1ACrd',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'crd',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'A_CRD',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Eta',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'eta',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'ETA',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Flexid',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'flexid',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'FLEXID',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1AObd',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'obd',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'A_OBD',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DocSent',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'docSent',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Doc_Sent',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 90,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'select',
|
|
selectOptionsKey: 'yesNoOptions',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1TelexRelease',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'telexRelease',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Telex_Release',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'select',
|
|
selectOptionsKey: 'yesNoOptions',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1AdvancePayment',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'advancePayment',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Advance_Payment',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 120,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1AdvancePaid',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'advancePaid',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Advance_Paid',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'select',
|
|
selectOptionsKey: 'yesNoOptions',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DCreate',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'createTime',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Create',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1MPlanner',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'planner',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'M_Planner',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1DEdit',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'edit',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'D_Edit',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'date',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1EPlanner',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'endPlanner',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'E_Planner',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 100,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1RemarkDelay',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'remarkDelay',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Remark_Delay',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 110,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
},
|
|
{
|
|
userId: this.$store.state.user.name,
|
|
functionId: 812003,
|
|
serialNumber: '812003Table1Comments',
|
|
tableId: '812003Table1',
|
|
tableName: 'PO Order',
|
|
columnProp: 'remark',
|
|
headerAlign: 'center',
|
|
align: 'center',
|
|
columnLabel: 'Comments',
|
|
columnHidden: false,
|
|
columnImage: false,
|
|
columnSortable: false,
|
|
sortLv: 0,
|
|
status: true,
|
|
fixed: '',
|
|
columnWidth: 140,
|
|
showOverflowTooltip: true,
|
|
editAble: true,
|
|
editType: 'text',
|
|
selectOptionsKey: '',
|
|
selectOptions: null
|
|
}
|
|
]
|
|
}
|
|
},
|
|
computed: {
|
|
visibleColumns () {
|
|
return this.columnList.filter(c => !c.columnHidden)
|
|
}
|
|
},
|
|
created () {
|
|
this.getDataList()
|
|
|
|
|
|
},
|
|
mounted () {
|
|
this.$nextTick(() => {
|
|
this.height = window.innerHeight - 180
|
|
})
|
|
},
|
|
methods: {
|
|
/**
|
|
* 表格当前行变化:将选中行深拷贝到 currentRow;取消选中时为 null - rqrq
|
|
*/
|
|
onTableCurrentChange (row) {
|
|
if (!row) {
|
|
this.currentRow = null
|
|
return
|
|
}
|
|
this.currentRow = row
|
|
},
|
|
|
|
/**
|
|
* 解析列对应的下拉选项:优先列上 selectOptions,其次 columnSelectOptions[selectOptionsKey]
|
|
*/
|
|
getSelectOptionsForColumn (item) {
|
|
if (item.selectOptions && item.selectOptions.length) {
|
|
return item.selectOptions
|
|
}
|
|
const key = item.selectOptionsKey
|
|
if (key && this.columnSelectOptions[key]) {
|
|
return this.columnSelectOptions[key]
|
|
}
|
|
return []
|
|
},
|
|
|
|
getDataList() {
|
|
this.loading = true
|
|
const params = {
|
|
...this.searchData,
|
|
page: this.pageIndex,
|
|
limit: this.pageSize
|
|
}
|
|
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('请求失败')
|
|
})
|
|
},
|
|
sizeChangeHandle (val) {
|
|
this.pageSize = val
|
|
this.pageIndex = 1
|
|
this.getDataList()
|
|
},
|
|
currentChangeHandle (val) {
|
|
this.pageIndex = val
|
|
this.getDataList()
|
|
},
|
|
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)
|
|
|
|
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: `已提交 ${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>
|
|
|
|
<style scoped lang="scss">
|
|
.el-table /deep/ .cell {
|
|
height: auto;
|
|
line-height: 1.5;
|
|
}
|
|
</style>
|