送货计划

This commit is contained in:
王帅 2025-06-10 13:22:58 +08:00
parent 0b13636e6f
commit d7594ac1ff
10 changed files with 437 additions and 55 deletions

View File

@ -0,0 +1,151 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
:scroll="{ y: 200, x: 1282 }"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
</a-table>
</div>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { getAction } from '@/api/manage'
export default {
name: 'DeliveryPlanDetailList',
mixins:[JeecgListMixin, mixinDevice],
components: {
},
data () {
return {
description: '送货明细管理页面',
// 表头
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'PO',
align:"center",
dataIndex: 'po'
},
{
title:'料号',
align:"center",
dataIndex: 'pn'
},
{
title:'数量',
align:"center",
dataIndex: 'planQty'
},
{
title:'单位',
align:"center",
dataIndex: 'unit'
},
{
title:'供应商',
align:"center",
dataIndex: 'supplier'
},
],
url: {
list: "/deliveryplandetail/deliveryPlanDetail/list",
delete: "/deliveryplandetail/deliveryPlanDetail/delete",
deleteBatch: "/deliveryplandetail/deliveryPlanDetail/deleteBatch",
exportXlsUrl: "/deliveryplandetail/deliveryPlanDetail/exportXls",
importExcelUrl: "deliveryplandetail/deliveryPlanDetail/importExcel",
getByDeliveryPlanId: "/deliveryplandetail/deliveryPlanDetail/getByDeliveryPlanId"
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
getByDeliveryPlanId(id){
getAction(this.url.getByDeliveryPlanId,{id: id}).then(res => {
if(res.success){
this.dataSource = res.result;
}
})
},
loadData(){},
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'po',text:'PO'})
fieldList.push({type:'string',value:'pn',text:'料号'})
fieldList.push({type:'number',value:'planqty',text:'数量'})
fieldList.push({type:'string',value:'unit',text:'单位'})
fieldList.push({type:'string',value:'supplier',text:'供应商'})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

View File

@ -77,6 +77,7 @@
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
:customRow="rowClick"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
@ -115,7 +116,7 @@
</a-popconfirm>
</a-menu-item>
<a-menu-item>
<a @click="handleTake(record)">送货</a>
<a @click="handleTake(record)">车辆预约</a>
</a-menu-item>
<a-menu-item>
<a @click="handleDownloadQRCode(record.id, '送货.png')">下载二维码</a>
@ -126,7 +127,7 @@
</a-table>
</div>
<DeliveryPlanDetailList ref="deliveryPlanDetailList"></DeliveryPlanDetailList>
<delivery-plan-modal ref="modalForm" @ok="modalFormOk"></delivery-plan-modal>
<TakeModal ref="takeModal" @ok="takeModalOk"/>
</a-card>
@ -139,13 +140,15 @@
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import DeliveryPlanModal from './modules/DeliveryPlanModal'
import TakeModal from './modules/TakeModal.vue'
import DeliveryPlanDetailList from './DeliveryPlanDetailList.vue'
export default {
name: 'DeliveryPlanList',
mixins:[JeecgListMixin, mixinDevice],
components: {
DeliveryPlanModal,
TakeModal
TakeModal,
DeliveryPlanDetailList
},
data () {
return {
@ -213,26 +216,26 @@
align:"center",
dataIndex: 'cpEmail'
},
{
title:'PO',
align:"center",
dataIndex: 'ffectivePo'
},
{
title:'料号',
align:"center",
dataIndex: 'pn'
},
{
title:'数量',
align:"center",
dataIndex: 'planQty'
},
{
title:'单位',
align:"center",
dataIndex: 'unit_dictText'
},
// {
// title:'PO',
// align:"center",
// dataIndex: 'ffectivePo'
// },
// {
// title:'料号',
// align:"center",
// dataIndex: 'pn'
// },
// {
// title:'数量',
// align:"center",
// dataIndex: 'planQty'
// },
// {
// title:'单位',
// align:"center",
// dataIndex: 'unit_dictText'
// },
{
title: '操作',
dataIndex: 'action',
@ -269,9 +272,18 @@
// 送货
handleTake(record){
this.$refs.takeModal.edit(record);
this.$refs.takeModal.title = "送货";
this.$refs.takeModal.title = "车辆预约";
this.$refs.takeModal.disableSubmit = false;
},
rowClick(record){
return {
on: {
click:() => {
this.$refs.deliveryPlanDetailList.getByDeliveryPlanId(record.id);
},
}
}
},
initDictConfig(){
},
getSuperFieldList(){

View File

@ -57,7 +57,7 @@
<a-col :span="8">
<a-form-model-item label="PO" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ffectivePo">
<!-- <a-input v-model="model.ffectivePo" placeholder="请输入PO" @keyup.enter.native="getByPo"></a-input> -->
<a-select placeholder="请选择PO" v-model="model.ffectivePo" showSearch @change="getByPo">
<a-select placeholder="请选择PO" v-model="model.ffectivePo" showSearch @change="changePo">
<a-select-option v-for="item in ffectivePoList"
:key="item" :value="item" :label="item">
{{item}}</a-select-option>
@ -85,21 +85,28 @@
<table style="width: 100%;">
<thead>
<tr align="center">
<th style="width: 25%;">料号</th>
<th style="width: 25%;">数量</th>
<th style="width: 25%;">单位</th>
<th style="width: 5%;"></th>
<th style="width: 25%;">PO</th>
<th style="width: 20%;">料号</th>
<th style="width: 10%;">数量</th>
<th style="width: 10%;">单位</th>
<th style="width: 25%;">供应商</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in poList" align="center" :key="index">
<td style="width: 25%;">{{ item.pn }}</td>
<td style="width: 25%;"><input type="number" v-model="item.planQty" min="0" :max="item.planQty" style="width: 100%;"></td>
<td style="width: 25%;">{{ item.unit }}</td>
<a-checkbox v-model="item.selected" style="width: 5%;"></a-checkbox>
<td style="width: 25%;">{{ item.po }}</td>
<td style="width: 20%;">{{ item.pn }}</td>
<td style="width: 10%;"><a-input-number v-model="item.planQty" :min="0" style="width: 100%;"/></td>
<td style="width: 10%;">{{ item.unit }}</td>
<td style="width: 25%;">{{ item.supplier }}</td>
</tr>
</tbody>
</table>
<div align="center" style="margin-top: 20px;">
<a-button @click="batchDel" type="danger">删除选中</a-button>
</div>
</a-spin>
</template>
@ -162,6 +169,9 @@
this.getPo()
},
methods: {
batchDel(){
this.poList = this.poList.filter(x => x.selected===false)
},
add () {
this.edit(this.modelDefault);
},
@ -200,10 +210,17 @@
})
},
getByPo(){
changePo(){
let hasEven = this.poList.some((item) => {
return item.po == this.model.ffectivePo;
});
if(hasEven){
this.$message.warning("列表中已存在"+value);
return;
}
getAction(this.url.getByPo,{po: this.model.ffectivePo}).then(res => {
if(res.success){
this.poList = res.result;
this.poList.push(...res.result)
}
})
},

View File

@ -1,6 +1,6 @@
<template>
<div class="table-page-search-wrapper" style="padding: 5px 10px;">
<h3 style="text-align: center;">送货</h3>
<h3 style="text-align: center;">车辆预约</h3>
<a-form-model ref="form" :model="model" :rules="validatorRules" layout="inline">
<a-row>
<a-col>

View File

@ -0,0 +1,168 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
</a-table>
</div>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { getAction } from '@/api/manage'
export default {
name: 'DeliveryDemandDetailList',
mixins:[JeecgListMixin, mixinDevice],
components: {
},
data () {
return {
description: '发货需求明细管理页面',
// 表头
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'发货单',
align:"center",
dataIndex: 'invoice'
},
{
title:'取货仓库',
align:"center",
dataIndex: 'pickUpHub'
},
{
title:'取货仓库编码',
align:"center",
dataIndex: 'pickUpHubCode'
},
{
title:'料号',
align:"center",
dataIndex: 'pn'
},
{
title:'品名',
align:"center",
dataIndex: 'productName'
},
{
title:'规格',
align:"center",
dataIndex: 'specName'
},
{
title:'发货数量',
align:"center",
dataIndex: 'shipNumber'
},
{
title:'单位',
align:"center",
dataIndex: 'unit'
},
],
url: {
list: "/deliverydemanddetail/deliveryDemandDetail/list",
delete: "/deliverydemanddetail/deliveryDemandDetail/delete",
deleteBatch: "/deliverydemanddetail/deliveryDemandDetail/deleteBatch",
exportXlsUrl: "/deliverydemanddetail/deliveryDemandDetail/exportXls",
importExcelUrl: "deliverydemanddetail/deliveryDemandDetail/importExcel",
queryByDeliveryDemandId: "/deliverydemanddetail/deliveryDemandDetail/queryByDeliveryDemandId"
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
queryByDeliveryDemandId(id){
getAction(this.url.queryByDeliveryDemandId,{deliveryDemandId: id}).then(res => {
if(res.success){
this.dataSource = res.result;
}
})
},
loadData(){},
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'invoice',text:'发货单'})
fieldList.push({type:'string',value:'pickUpHub',text:'取货仓库'})
fieldList.push({type:'string',value:'pickUpHubCode',text:'取货仓库编码'})
fieldList.push({type:'string',value:'pn',text:'料号'})
fieldList.push({type:'string',value:'productName',text:'品名'})
fieldList.push({type:'string',value:'specName',text:'规格'})
fieldList.push({type:'string',value:'shipNumber',text:'发货数量'})
fieldList.push({type:'string',value:'unit',text:'单位'})
fieldList.push({type:'string',value:'deliveryDemandId',text:'发货需求id'})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

View File

@ -85,6 +85,7 @@
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
:customRow="rowClick"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
@ -128,7 +129,7 @@
</a-table>
</div>
<DeliveryDemandDetailList ref="deliveryDemandDetailList"></DeliveryDemandDetailList>
<delivery-demand-modal ref="modalForm" @ok="modalFormOk"></delivery-demand-modal>
</a-card>
</template>
@ -140,12 +141,14 @@
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { postAction } from '@/api/manage'
import DeliveryDemandModal from './modules/DeliveryDemandModal'
import DeliveryDemandDetailList from './DeliveryDemandDetailList.vue'
export default {
name: 'DeliveryDemandList',
mixins:[JeecgListMixin, mixinDevice],
components: {
DeliveryDemandModal
DeliveryDemandModal,
DeliveryDemandDetailList
},
data () {
return {
@ -297,6 +300,15 @@
}
})
},
rowClick(record){
return {
on: {
click:() => {
this.$refs.deliveryDemandDetailList.queryByDeliveryDemandId(record.id);
},
}
}
},
initDictConfig(){
},
getSuperFieldList(){

View File

@ -89,7 +89,7 @@
dataIndex: 'deliveryDate'
},
{
title:'发货类型',
title:'运输类型',
align:"center",
dataIndex: 'shipType_dictText',
},

View File

@ -13,8 +13,8 @@
</a-col>
<template v-if="toggleSearchStatus">
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="发货类型">
<a-input placeholder="请输入发货类型" v-model="queryParam.shipType"></a-input>
<a-form-item label="运输类型">
<a-input placeholder="请输入运输类型" v-model="queryParam.shipType"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
@ -213,7 +213,7 @@
dataIndex: 'deliveryDate'
},
{
title:'发货类型',
title:'运输类型',
align:"center",
dataIndex: 'shipType_dictText',
// width: 100,
@ -399,7 +399,7 @@
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'date',value:'shipDate',text:'发货日期'})
fieldList.push({type:'string',value:'shipType',text:'发货类型'})
fieldList.push({type:'string',value:'shipType',text:'运输类型'})
fieldList.push({type:'int',value:'totalPallets',text:'预计装车总托数'})
fieldList.push({type:'string',value:'deliveryArea',text:'送货区域'})
fieldList.push({type:'string',value:'deliveryAddress',text:'送货地点'})

View File

@ -192,13 +192,25 @@
width: 80
},
{
title:'车型',
title:'系统车型',
align:"center",
dataIndex: 'systemCarType',
width: 80
},
{
title:'系统车长',
align:"center",
dataIndex: 'systemCarLong',
width: 100
},
{
title:'实际车型',
align:"center",
dataIndex: 'carType',
width: 80
},
{
title:'车长',
title:'实际车长',
align:"center",
dataIndex: 'carLong',
width: 100

View File

@ -14,15 +14,25 @@
<j-dict-select-tag type="list" v-model="model.shipType" dictCode="ship_type" placeholder="请选择发货类型" />
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="车型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="carType">
<!-- <j-dict-select-tag type="list" v-model="model.carType" dictCode="tms_vehicle_pallet,car_type,car_type" placeholder="请选择车型" /> -->
<a-auto-complete v-model="model.carType" placeholder="请输入车型" @select="carTypeSelect" @change="carTypeChange" :dataSource="carTypeList"></a-auto-complete>
<!-- <a-col :span="12">
<a-form-model-item label="系统车型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="systemCarType">
<a-auto-complete v-model="model.systemCarType" placeholder="请输入系统车型"></a-auto-complete>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="车长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="carLong">
<a-input-number v-model="model.carLong" placeholder="请输入车长" style="width: 100%" disabled/>
<a-form-model-item label="系统车长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="systemCarLong">
<a-input-number v-model="model.systemCarLong" placeholder="请输入系统车长" style="width: 100%" disabled/>
</a-form-model-item>
</a-col> -->
<a-col :span="12">
<a-form-model-item label="实际车型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="carType">
<!-- <j-dict-select-tag type="list" v-model="model.carType" dictCode="tms_vehicle_pallet,car_type,car_type" placeholder="请选择车型" /> -->
<a-auto-complete v-model="model.carType" placeholder="请输入实际车型" @select="carTypeSelect" @change="carTypeChange" :dataSource="carTypeList"></a-auto-complete>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="实际车长" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="carLong">
<a-input-number v-model="model.carLong" placeholder="请输入实际车长" style="width: 100%" disabled/>
</a-form-model-item>
</a-col>
<!-- <a-col :span="12">
@ -30,17 +40,17 @@
<a-input v-model="model.deliveryArea" placeholder="请输入送货区域" ></a-input>
</a-form-model-item>
</a-col> -->
<a-col :span="12">
<a-form-model-item label="取货仓库" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pickUpHub">
<!-- <a-col :span="12">
<a-form-model-item label="取货仓库" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pickUpHub"> -->
<!-- <j-dict-select-tag type="list" v-model="model.pickUpHub" dictCode="pick_up_hub" placeholder="请选择取货仓库" /> -->
<a-auto-complete v-model="model.pickUpHub" placeholder="请输入取货仓库" @select="pickUpHubSelect" @change="pickUpHubChange" :dataSource="pickUpHubList"></a-auto-complete>
<!-- <a-auto-complete v-model="model.pickUpHub" placeholder="请输入取货仓库" @select="pickUpHubSelect" @change="pickUpHubChange" :dataSource="pickUpHubList"></a-auto-complete>
</a-form-model-item>
</a-col>
<a-col :span="12">
</a-col> -->
<!-- <a-col :span="12">
<a-form-model-item label="送货地点" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deliveryAddress">
<j-dict-select-tag type="list" v-model="model.deliveryAddress" dictCode="delivery_address" placeholder="请选择送货地点" disabled/>
</a-form-model-item>
</a-col>
</a-col> -->
<a-col :span="12">
<a-form-model-item label="供应商编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="supplierCode">
<a-input v-model.trim="model.supplierCode" placeholder="请输入供应商编码"/>