change - 新建生产任务:销售订单批量创建

master
yinq 2 weeks ago
parent dbe44bba43
commit 5415413483

@ -234,4 +234,15 @@ public class MesProductOrderController extends BaseController {
return R.fail(e.getMessage());
}
}
/**
*
*/
@RequiresPermissions("mes:productOrder:add")
@Log(title = "生产工单", businessType = BusinessType.INSERT)
@PostMapping("/batchAddProductOrder")
public AjaxResult batchAddProductOrder(@RequestBody List<MesProductOrder> mesProductOrders) {
return toAjax(mesProductOrderService.batchAddProductOrder(mesProductOrders));
}
}

@ -213,7 +213,18 @@ public class MesSaleOrder extends BaseEntity {
@Excel(name = "项目名称")
private String projectName;//项目名称
/**
* (1=0=)
*/
private String isTaskFlag;
public String getIsTaskFlag() {
return isTaskFlag;
}
public void setIsTaskFlag(String isTaskFlag) {
this.isTaskFlag = isTaskFlag;
}
public String getMaterialModel() {
return materialModel;

@ -143,4 +143,11 @@ public interface IMesProductOrderService
*
*/
public void productOrderOverTimeAlarm();
/**
*
* @param mesProductOrders
* @return
*/
int batchAddProductOrder(List<MesProductOrder> mesProductOrders);
}

@ -28,6 +28,7 @@ import org.springframework.stereotype.Service;
import com.hw.mes.mapper.MesProductOrderMapper;
import com.hw.mes.domain.MesProductOrder;
import com.hw.mes.service.IMesProductOrderService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@ -669,6 +670,22 @@ public class MesProductOrderServiceImpl implements IMesProductOrderService {
}
/**
*
* @param mesProductOrders
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int batchAddProductOrder(List<MesProductOrder> mesProductOrders) {
for (MesProductOrder mesProductOrder : mesProductOrders) {
mesProductOrder.setOrderCode(this.getOrderCode());
mesProductOrder.setCreateBy(SecurityUtils.getLoginUser().getUsername());
this.insertMesProductOrder(mesProductOrder);
}
return 1;
}
private static SysPointRouter getSysPointRouter(Long productOrderId, String nickName, Date currentDate) {
SysPointRouter sysPointRouter = new SysPointRouter();

@ -41,6 +41,7 @@
<result property="materialSpec" column="material_spec"/>
<result property="erpMaterialId" column="erp_material_id"/>
<result property="projectName" column="project_name"/>
<result property="isTaskFlag" column="isTaskFlag"/>
</resultMap>
<sql id="selectMesSaleOrderVo">
@ -258,10 +259,14 @@
mso.complete_date,
mso.sale_order_classfication,
mso.create_time,
mpi.project_name
mpi.project_name,
IF(mpo.sale_order_id > 0, '1', '0') isTaskFlag
from mes_sale_order mso left join mes_base_material_info mbmi on
((mso.material_id = mbmi.erp_id and (mso.sale_order_classfication='1' or mso.sale_order_classfication='3')) or (mso.material_id = mbmi.material_id and mso.sale_order_classfication='2'))
left join mes_project_info mpi on mso.tond_base=mpi.erp_id
left join (select sale_order_id
from mes_product_order
group by sale_order_id) mpo on mpo.sale_order_id = mso.sale_order_id
<where>
mso.is_flag = '1'
<if test="saleorderCode != null and saleorderCode != ''">and mso.saleorder_code like concat('%', #{saleorderCode},

@ -151,3 +151,12 @@ export function getStockTotalWithRawOutstocks(query) {
params: query
})
}
// 批量新增生产工单
export function batchAddProductOrder(data) {
return request({
url: '/mes/productOrder/batchAddProductOrder',
method: 'post',
data: data
})
}

@ -0,0 +1,306 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="类型" prop="saleOrderClassfication">
<el-select v-model="queryParams.saleOrderClassfication" placeholder="请选择类型" clearable>
<el-option
v-for="dict in dict.type.mes_sale_order_classfication"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="销售订单编号" prop="saleorderCode">
<el-input
v-model="queryParams.saleorderCode"
placeholder="请输入销售订单编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入物料编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入物料名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料规格" prop="materialSpec">
<el-input
v-model="queryParams.materialSpec"
placeholder="请输入物料规格"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="saleOrderList"
@selection-change="handleSelectionChange"
ref="selectSaleOrderRef">
<el-table-column type="selection" width="50" />
<el-table-column label="主键标识" align="center" prop="saleOrderId" v-if="columns[0].visible"/>
<el-table-column label="ERP主键" align="center" prop="erpId" v-if="columns[1].visible"/>
<el-table-column label="ERP订单明细ID" align="center" prop="fentryId" v-if="columns[2].visible"/>
<el-table-column label="类型" align="center" prop="saleOrderClassfication">
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_sale_order_classfication" :value="scope.row.saleOrderClassfication"/>
</template>
</el-table-column>
<el-table-column label="销售订单号" align="center" prop="saleorderCode" width="100">
<template slot-scope="scope">
<el-button
type="text"
class="wrap-text-button"
@mouseover="hover = true"
@mouseleave="hover = false"
@click="getRelateList(scope.row)"
v-if="scope.row.saleOrderClassfication!=='1'"
>
{{ scope.row.saleorderCode }}
</el-button>
<p v-if="scope.row.saleOrderClassfication==='1'">{{ scope.row.saleorderCode }}</p>
</template>
</el-table-column>
<el-table-column label="单据状态" align="center" prop="documentStatus" v-if="columns[5].visible" >
<template slot-scope="scope">
<dict-tag :options="dict.type.document_status" :value="scope.row.documentStatus"/>
</template>
</el-table-column>
<el-table-column label="所属工厂" align="center" prop="factoryId" v-if="columns[6].visible"/>
<el-table-column label="所属产线" align="center" prop="prodlineId" v-if="columns[7].visible"/>
<el-table-column label="物料ID" align="center" prop="materialId" v-if="columns[8].visible" width="120"/>
<el-table-column label="物料编码" align="center" prop="materialCode" v-if="columns[9].visible" width="140"/>
<el-table-column label="物料名称" align="center" prop="materialName" v-if="columns[10].visible" width="100"/>
<el-table-column label="物料规格" align="center" prop="materialSpec" width="180"/>
<el-table-column label="订单数量" align="center" prop="orderAmount" v-if="columns[12].visible"/>
<el-table-column label="已发布数量" align="center" prop="releaseQty" v-if="columns[14].visible" width="100"/>
<el-table-column label="下达任务标识" align="center" prop="isTaskFlag" v-if="columns[28].visible" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.is_release" :value="scope.row.isTaskFlag"/>
</template>
</el-table-column>
<el-table-column label="完成数量" align="center" prop="completeAmount" v-if="columns[13].visible"/>
<el-table-column label="是否已下达计划" align="center" prop="isRelease" v-if="columns[15].visible" >
<template slot-scope="scope">
<dict-tag :options="dict.type.is_release" :value="scope.row.isRelease"/>
</template>
</el-table-column>
<el-table-column label="审核日期" align="center" prop="approveDate" width="180" v-if="columns[16].visible">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.approveDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="ERP最后修改日期" align="center" prop="erpModifyDate" width="180" v-if="columns[17].visible">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.erpModifyDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="计划交货日期" align="center" prop="planDeliveryDate" v-if="columns[18].visible" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.planDeliveryDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[23].visible"/>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="relateTitle" :visible.sync="relateOpen" append-to-body>
<el-table v-loading="relateLoading" :data="relateSaleOrderList">
<el-table-column label="销售订单号" align="center" prop="saleorderCode"/>
<el-table-column label="物料ID" align="center" prop="materialId" v-if="false"/>
<el-table-column label="物料编码" align="center" prop="materialCode"/>
<el-table-column label="物料名称" align="center" prop="materialName"/>
<el-table-column label="物料规格" align="center" prop="materialSpec"/>
<el-table-column label="订单数量" align="center" prop="orderAmount"/>
<el-table-column label="计划交货日期" align="center" prop="planDeliveryDate">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.planDeliveryDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="relateTotal>0"
:total="relateTotal"
:page.sync="relateQueryParams.pageNum"
:limit.sync="relateQueryParams.pageSize"
@pagination="getRelateList"
/>
</el-dialog>
</div>
</template>
<script>
import { listSaleOrder, getSaleOrder, delSaleOrder, addSaleOrder, updateSaleOrder } from "@/api/mes/saleOrder";
import {getSaleOrders} from "@/api/mes/productOrder"
export default {
name: "BatchSaleOrder",
dicts: ['document_status', 'is_release', 'active_flag','mes_sale_order_classfication'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
saleOrderList: [],
selectedRows: [],
relateTotal:0,
//
relateSaleOrderList:[],
//
relateLoading: true,
//
relateTitle: "",
//
relateOpen: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
erpId: null,
fentryId: null,
saleorderCode: null,
saleorderLinenumber: null,
documentStatus: null,
factoryId: null,
prodlineId: null,
materialId: null,
materialCode: null,
materialName: null,
matkl: null,
orderAmount: null,
completeAmount: null,
releaseQty: null,
isRelease: null,
approveDate: null,
erpModifyDate: null,
planDeliveryDate: null,
beginDate: null,
endDate: null,
completeDate: null,
isFlag: null,
},
relateQueryParams: {
pageNum: 1,
pageSize: 10,
},
columns: [
{ key: 0, label: `主键标识`, visible: false },
{ key: 1, label: `ERP主键`, visible: false },
{ key: 2, label: `ERP订单明细ID`, visible: false },
{ key: 3, label: `销售订单编号`, visible: true },
{ key: 4, label: `销售订单行号`, visible: true },
{ key: 5, label: `单据状态`, visible: false },
{ key: 6, label: `所属工厂`, visible: false },
{ key: 7, label: `所属产线`, visible: false },
{ key: 8, label: `物料ID`, visible: false },
{ key: 9, label: `物料编码`, visible: true },
{ key: 10, label: `物料名称`, visible: true },
{ key: 11, label: `物料组`, visible: false },
{ key: 12, label: `订单计划数量`, visible: true },
{ key: 13, label: `完成数量`, visible: true },
{ key: 14, label: `已发布数量`, visible: true },
{ key: 15, label: `是否已下达计划`, visible: false },
{ key: 16, label: `审核日期`, visible: false },
{ key: 17, label: `ERP最后修改日期`, visible: false },
{ key: 18, label: `计划交货日期`, visible: true },
{ key: 19, label: `计划开始日期`, visible: true },
{ key: 20, label: `计划结束日期`, visible: true },
{ key: 21, label: `完成日期`, visible: true },
{ key: 22, label: `是否标识`, visible: true },
{ key: 23, label: `备注`, visible: false },
{ key: 24, label: `创建人`, visible: false },
{ key: 25, label: `创建时间`, visible: false },
{ key: 26, label: `更新人`, visible: false },
{ key: 27, label: `更新时间`, visible: false },
{ key: 28, label: `下达任务标识`, visible: true },
],
};
},
created() {
this.selectedRows = [];
this.ids = []
this.getList();
},
methods: {
/** 查询销售订单信息列表 */
getList() {
this.loading = true;
this.queryParams.selectFlag = "1";
this.queryParams.relateFlag = null;
getSaleOrders(this.queryParams).then(response => {
this.saleOrderList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
handleSelectionChange(selection) {
this.selectedRows = selection;
this.ids = selection.map(item => item.saleOrderId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 查询销售订单信息列表 */
getRelateList(row) {
this.relateOpen = true;
this.relateTitle = "关联销售订单信息";
this.relateLoading = true;
this.relateQueryParams.selectFlag = null;
this.relateQueryParams.relateFlag = "1";
this.relateQueryParams.virtualSaleOrderId = row.saleOrderId;
getSaleOrders(this.relateQueryParams).then(response => {
this.relateSaleOrderList = response.rows;
this.relateTotal = response.total;
this.relateLoading = false;
});
},
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
clearSelection() {
this.$refs.selectSaleOrderRef.clearSelection();
this.selectedRows = [];
}
}
};
</script>
<style lang="less" scoped>
.wrap-text-button {
white-space: normal;
word-break: break-all;
}
</style>

@ -126,6 +126,17 @@
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleBatchSaleAdd"
v-hasPermi="['mes:productOrder:add']"
>批量销售新增
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
@ -136,7 +147,7 @@
<!-- v-hasPermi="['mes:productOrder:edit']"-->
<!-- >修改工单-->
<!-- </el-button>-->
</el-col>
<!-- </el-col>-->
<!--el-col :span="1.5">
<el-button
type="danger"
@ -622,6 +633,119 @@
</el-table>
</el-dialog>
<!-- 批量销售新增对话框 -->
<el-dialog title="批量销售新增" :visible.sync="batchSaleOpen" width="1400px" append-to-body>
<el-form :model="batchSaleForm" label-width="110px">
<el-form-item label="销售类型" prop="batchSaleType">
<el-radio-group v-model="batchSaleForm.batchSaleType" :disabled="batchSaleOrders.length > 0">
<el-radio
v-for="dict in dict.type.mes_sale_type"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="选择销售订单">
<el-button type="primary" @click="openBatchSaleOrderDialog" :disabled="!batchSaleForm.batchSaleType">选择销售订单</el-button>
</el-form-item>
</el-form>
<el-table :data="batchSaleOrders" style="width: 100%; margin-bottom: 20px" v-if="batchSaleOrders.length">
<el-table-column prop="saleorderCode" label="销售订单号" width="100" align="center"/>
<el-table-column prop="materialName" label="成品名称" width="130" align="center" v-if="batchSaleForm.batchSaleType !== MES_SALE_TYPE.MES_SALE_TYPE_PACKING"/>
<el-table-column label="成品BOM" width="200" align="center" v-if="batchSaleForm.batchSaleType === MES_SALE_TYPE.MES_SALE_TYPE_EXTERNAL">
<template slot-scope="scope">
<el-select v-model="scope.row.materialBomId" placeholder="请选择物料BOM">
<el-option v-for="item in (scope.row.materialBomList || [])" :key="item.materialBomId" :label="item.materialNameDesc" :value="item.materialBomId" :disabled="item.activeFlag!=='1'"/>
</el-select>
</template>
</el-table-column>
<el-table-column label="生产物料" width="180" align="center" v-if="batchSaleForm.batchSaleType === MES_SALE_TYPE.MES_SALE_TYPE_INTERNAL">
<template slot-scope="scope">
<el-input v-model="scope.row.produceMaterialName" placeholder="请点击右侧检索物料" readonly>
<el-button slot="append" icon="el-icon-search" @click="openBatchSaleProduceMaterialDialog(scope.$index)"></el-button>
</el-input>
</template>
</el-table-column>
<!-- 新增: 物料BOM仅对内生产显示 -->
<el-table-column label="物料BOM" width="200" align="center" v-if="batchSaleForm.batchSaleType === MES_SALE_TYPE.MES_SALE_TYPE_INTERNAL">
<template slot-scope="scope">
<el-select v-model="scope.row.materialBomId" placeholder="请选择物料BOM">
<el-option v-for="item in (scope.row.materialBomList || [])" :key="item.materialBomId" :label="item.materialNameDesc" :value="item.materialBomId" :disabled="item.activeFlag!=='1'"/>
</el-select>
</template>
</el-table-column>
<el-table-column label="工艺路线" width="180" align="center" v-if="batchSaleForm.batchSaleType !== MES_SALE_TYPE.MES_SALE_TYPE_PACKING">
<template slot-scope="scope">
<el-select v-model="scope.row.dispatchId" filterable placeholder="请选择工艺路线" clearable>
<el-option v-for="item in routeList" :key="item.routeId" :label="item.routeName" :value="item.routeId"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="柜体渠道" width="120" align="center">
<template slot-scope="scope">
<el-radio-group v-model="scope.row.cabinetChannel" v-if="scope.row.dispatchId===4">
<el-radio v-for="dict in dict.type.mes_product_order_canbinet_channel" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column prop="saleAmount" label="销售数量" width="100" align="center" v-if="batchSaleForm.batchSaleType !== MES_SALE_TYPE.MES_SALE_TYPE_PACKING"/>
<el-table-column label="计划数量" width="140" align="center">
<template slot-scope="scope">
<el-input-number v-model="scope.row.planAmount" size="mini" controls-position="right" :max="scope.row.orderAmount" placeholder="请输入计划数量"/>
</template>
</el-table-column>
<el-table-column label="计划交货日期" width="200" align="center">
<template slot-scope="scope">
<el-date-picker v-model="scope.row.planDeliveryDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择计划交货日期"/>
</template>
</el-table-column>
<el-table-column label="计划开始时间" width="200" align="center">
<template slot-scope="scope">
<el-date-picker v-model="scope.row.planBeginTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择计划开始时间"/>
</template>
</el-table-column>
<el-table-column label="计划结束时间" width="200" align="center">
<template slot-scope="scope">
<el-date-picker v-model="scope.row.planEndTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择计划结束时间"/>
</template>
</el-table-column>
<!-- <el-table-column label="前置生产任务" width="180" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- <el-input v-model="scope.row.preOrderCode" placeholder="请点击右侧检索生产任务" readonly>-->
<!-- <el-button slot="append" icon="el-icon-search" "></el-button>-->
<!-- </el-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="备注" width="180" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.remark" type="textarea" placeholder="请输入内容"/>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitBatchSaleForm"> </el-button>
<el-button @click="batchSaleOpen = false"> </el-button>
</div>
</el-dialog>
<!-- 新增: 批量选择销售订单弹窗 -->
<el-dialog title="选择销售订单" :visible.sync="batchSaleOrderOpen" width="1000px" append-to-body>
<add-batch-sale-order ref="batchSaleOrderRef" />
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleBatchSaleOrderSelect"> </el-button>
<el-button @click="batchSaleOrderOpen = false"> </el-button>
</div>
</el-dialog>
<!-- 新增: 批量选择生产物料弹窗 -->
<el-dialog title="选择生产物料" :visible.sync="batchSaleProduceMaterialOpen" append-to-body>
<select-material @selection="()=>{}" ref="batchSaleProduceMaterialRef" :select-type="MATERIAL_TYPE.RAW" v-if="batchSaleProduceMaterialOpen"></select-material>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitBatchSaleProduceMaterialForm"> </el-button>
<el-button @click="batchSaleProduceMaterialOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
@ -632,8 +756,15 @@ import {
delProductOrder,
addProductOrder,
updateProductOrder,
getMaterialUsages, getStockTotalWithRawOutstocks,
getOrderCode, productOrderLockInventory, productOrderPublish, productOrderPause,productOrderContinue,productOrderRecall
getMaterialUsages,
getStockTotalWithRawOutstocks,
getOrderCode,
productOrderLockInventory,
productOrderPublish,
productOrderPause,
productOrderContinue,
productOrderRecall,
batchAddProductOrder
} from "@/api/mes/productOrder";
import addSaleOrder from '@//views/mes/productOrder/addSaleOrder.vue';
import {getMaterialVisionList} from "@//api/mes/materialBom";
@ -642,6 +773,7 @@ import add_ProductOrder from '@//views/mes/productOrder/addProductOrder.vue';
import router from "@//router";
import {parseTime} from "@/utils/ruoyi";
import selectMaterial from "@/views/mes/materialinfo/selectMaterial.vue";
import addBatchSaleOrder from '@//views/mes/productOrder/addBatchSaleOrder.vue';
export default {
name: "ProductOrder",
@ -650,6 +782,7 @@ export default {
'add-SaleOrder': addSaleOrder,
'select-material': selectMaterial,
'add-product-order': add_ProductOrder,
'add-batch-sale-order': addBatchSaleOrder,
},
data() {
return {
@ -899,7 +1032,17 @@ export default {
PAUSE: '4', //
RECALLED: '5',//
DELETED: '9',//
}
},
//
batchSaleOpen: false,
batchSaleOrderOpen: false, // :
batchSaleForm: {
batchSaleType: ''
},
batchSaleOrders: [],
// :
batchSaleProduceMaterialOpen: false,
currentBatchSaleRowIndex: null,
};
},
activated() {
@ -1430,6 +1573,119 @@ export default {
}
return '';
},
handleBatchSaleAdd() {
this.batchSaleForm.batchSaleType = '';
this.batchSaleOrders = [];
this.batchSaleOpen = true;
// :
this.batchSaleProduceMaterialOpen = false;
this.currentBatchSaleRowIndex = null;
},
openBatchSaleOrderDialog() {
this.batchSaleOrderOpen = true;
},
// :
handleBatchSaleOrderSelect() {
const rows = this.$refs.batchSaleOrderRef.selectedRows || [];
this.batchSaleOrders = rows.map(row => ({
saleOrderId: row.saleOrderId,
saleorderCode: row.saleorderCode,
saleorderLinenumber: row.saleorderLinenumber,
saleAmount: row.orderAmount,
planBeginTime: row.beginDate == null ? null : row.beginDate + " 00:00:00",
planEndTime: row.endDate == null ? null : row.endDate + " 00:00:00",
planDeliveryDate: row.planDeliveryDate == null ? null : row.planDeliveryDate + " 00:00:00",
saleOrderFlag: '1',
materialId: row.materialId,
materialCode: row.materialCode,
materialName: row.materialName,
planAmount: 1,
dispatchType: '2',
saleType: this.batchSaleForm.batchSaleType,
materialBomList: []
}));
rows.forEach((row, index) => {
getMaterialVisionList(row.materialId).then(response => {
if (response.data && response.data.length !== 0) {
this.$set(this.batchSaleOrders[index], 'materialBomList', response.data);
this.batchSaleOrders[index].materialBomId = response.data[0].materialBomId;
} else {
this.$modal.msgError(row.materialName + "物料未维护BOM信息");
this.$set(this.batchSaleOrders[index], 'materialBomList', []);
}
}).catch(error => {
console.error('获取BOM信息失败:', error);
this.$set(this.batchSaleOrders[index], 'materialBomList', []);
});
});
console.log("batchSaleOrders",this.batchSaleOrders)
this.$refs.batchSaleOrderRef.clearSelection();
this.batchSaleOrderOpen = false;
},
submitBatchSaleForm() {
//
const requiredFields = [
{ key: 'planAmount', label: '计划数量' },
{ key: 'planDeliveryDate', label: '计划交货日期' },
// :
...(this.batchSaleForm.batchSaleType === this.MES_SALE_TYPE.MES_SALE_TYPE_INTERNAL ? [
{ key: 'produceMaterialName', label: '生产物料' },
{ key: 'materialBomId', label: '物料BOM' },
] : []),
];
for (let i = 0; i < this.batchSaleOrders.length; i++) {
const row = this.batchSaleOrders[i];
for (const field of requiredFields) {
if (!row[field.key]) {
this.$message.error(`${i + 1}行【${row.saleorderCode || ''}】的\"${field.label}\"不能为空!`);
return;
}
}
//
if (Number(row.planAmount) < 1 || Number(row.planAmount) > Number(row.orderAmount)) {
this.$message.error(`${i + 1}行【${row.saleorderCode || ''}】的"计划数量"需为1~销售数量之间的整数!`);
return;
}
//
if (row.planEndTime && row.planBeginTime && row.planEndTime <= row.planBeginTime) {
this.$message.error(`${i + 1}行【${row.saleorderCode || ''}】的"计划结束时间"需大于"计划开始时间"`);
return;
}
if (row.planDeliveryDate && row.planEndTime && row.planDeliveryDate <= row.planEndTime) {
this.$message.error(`${i + 1}行【${row.saleorderCode || ''}】的"计划交付时间"需大于"计划结束时间"`);
return;
}
}
this.submitLoading = true;
batchAddProductOrder(this.batchSaleOrders).then(() => {
this.$message.success('批量新增成功!');
this.batchSaleOpen = false;
this.getList();
}).catch(() => {
this.$message.error('批量新增失败,请检查数据!');
}).finally(() => {
this.submitLoading = false;
});
},
// :
openBatchSaleProduceMaterialDialog(rowIndex) {
this.currentBatchSaleRowIndex = rowIndex;
this.batchSaleProduceMaterialOpen = true;
},
// :
submitBatchSaleProduceMaterialForm() {
const selectedRow = this.$refs.batchSaleProduceMaterialRef.selectedRow;
if (selectedRow) {
const idx = this.currentBatchSaleRowIndex;
this.$set(this.batchSaleOrders[idx], 'produceMaterialId', selectedRow.materialId);
this.$set(this.batchSaleOrders[idx], 'produceMaterialName', selectedRow.materialName);
}
this.batchSaleProduceMaterialOpen = false;
},
}
};
</script>

Loading…
Cancel
Save