change - 原材料条码收料批量新增、收料通知单添加条码生成标识、批量选择收料通知单

master
yinq 4 days ago
parent 8dc394ef1a
commit b64f0dcfbc

@ -97,7 +97,29 @@ public class MesPurchaseReceiveBill extends BaseEntity
private String materialSpec;
public void setReceiveBillId(Long receiveBillId)
/** mes_purchase_order主键 */
private Long purchaseOrderId;
/** 条码生成标识1=是;0=否) */
private String hasBarcodeFlag;
public String getHasBarcodeFlag() {
return hasBarcodeFlag;
}
public void setHasBarcodeFlag(String hasBarcodeFlag) {
this.hasBarcodeFlag = hasBarcodeFlag;
}
public Long getPurchaseOrderId() {
return purchaseOrderId;
}
public void setPurchaseOrderId(Long purchaseOrderId) {
this.purchaseOrderId = purchaseOrderId;
}
public void setReceiveBillId(Long receiveBillId)
{
this.receiveBillId = receiveBillId;
}

@ -30,6 +30,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="materialSpec" column="material_spec" />
<result property="purchaseOrderId" column="purchase_order_id" />
<result property="hasBarcodeFlag" column="has_barcode_flag" />
</resultMap>
<sql id="selectMesPurchaseReceiveBillVo">
@ -167,19 +169,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMesPurchaseReceiveBillJoinList" parameterType="MesPurchaseReceiveBill" resultMap="MesPurchaseReceiveBillResult">
select mprb.receive_bill_id, mprb.erp_id, mprb.fentry_id, mprb.bill_no, mprb.po_no, mprb.document_status,
mprb.material_id, mbmi.material_code, mbmi.material_name, mbmi.material_spec,mprb.fs_bill_id, mprb.fs_id,
mprb.act_land_amount, mprb.act_receive_amount, mprb.approve_date, mprb.erp_modify_date,
mprb.purchase_org_id, mprb.tond_base, mprb.price, mprb.supplier_id, mprb.remark, mprb.create_by,
mprb.create_time, mprb.update_by, mprb.update_time from mes_purchase_receive_bill mprb
left join mes_base_material_info mbmi on mprb.material_id=mbmi.erp_id
select mprb.receive_bill_id,
mprb.erp_id,
mprb.fentry_id,
mprb.bill_no,
mprb.po_no,
mprb.document_status,
mbmi.material_id,
mbmi.material_code,
mbmi.material_name,
mbmi.material_spec,
mprb.fs_bill_id,
mprb.fs_id,
mprb.act_land_amount,
mprb.act_receive_amount,
mprb.approve_date,
mprb.erp_modify_date,
mprb.purchase_org_id,
mprb.tond_base,
mprb.price,
mprb.supplier_id,
mprb.remark,
mprb.create_by,
mprb.create_time,
mprb.update_by,
mprb.update_time,
mpo.purchase_order_id,
IF(EXISTS (SELECT 1
FROM mes_base_barcode_info
WHERE receive_bill_id = mprb.receive_bill_id), '1', '0') AS has_barcode_flag
from mes_purchase_receive_bill mprb
left join mes_purchase_order mpo on mprb.po_no = mpo.po_no and mprb.material_id = mpo.material_id
left join mes_base_material_info mbmi on mprb.material_id = mbmi.erp_id
<where>
<if test="billNo != null and billNo != ''"> and mprb.bill_no like concat('%', #{billNo}, '%')</if>
<if test="poNo != null and poNo != ''"> and mprb.po_no like concat('%', #{poNo}, '%')</if>
<if test="materialCode != null and materialCode != ''"> and mbmi.material_code like concat('%', #{materialCode}, '%')</if>
<if test="materialName != null and materialName != ''"> and mbmi.material_name like concat('%', #{materialName}, '%')</if>
<if test="materialSpec != null and materialSpec != ''"> and mbmi.material_spec like concat('%', #{materialSpec}, '%')</if>
<if test="hasBarcodeFlag != null and hasBarcodeFlag != ''">
and mbmi.material_id is not null
and IF(EXISTS (SELECT 1 FROM mes_base_barcode_info WHERE receive_bill_id = mprb.receive_bill_id), '1', '0') = #{hasBarcodeFlag}
</if>
</where>
order by mprb.erp_modify_date desc
</select>

@ -85,6 +85,17 @@
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleReceiveBatchAdd"
v-hasPermi="['mes:barcode:add']"
>收料批量新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
@ -820,6 +831,64 @@
<el-button @click="batchPurchaseOrderOpen = false"> </el-button>
</div>
</el-dialog>
<el-dialog title="批量选择收料通知单" :visible.sync="receiveBatchOpen" width="1300px" append-to-body>
<select-purchaseReceiveBillBatch ref="receiveBatchRef" v-if="receiveBatchOpen"></select-purchaseReceiveBillBatch>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitReceiveBatchSelect"> </el-button>
<el-button @click="cancelReceiveBatchSelect"> </el-button>
</div>
</el-dialog>
<el-dialog title="收料批量新增" :visible.sync="receiveBatchTableOpen" width="1300px" append-to-body>
<el-table :data="receiveBatchTable">
<el-table-column label="收料单据号" prop="billNo" align="center" />
<el-table-column label="采购订单号" prop="poNo" align="center" />
<el-table-column label="物料ID" prop="materialId" align="center" />
<el-table-column label="物料编码" prop="materialCode" align="center" width="120"/>
<el-table-column label="物料名称" prop="materialName" align="center" width="120"/>
<el-table-column label="物料规格" prop="materialSpec" align="center" width="120"/>
<el-table-column label="规格参数" prop="barcodeSpec" align="center" />
<el-table-column label="收料数量" prop="actLandAmount" align="center" />
<!-- <el-table-column label="可用数量" prop="availableBindAmount" align="center"/>-->
<el-table-column label="批次标识" align="center" width="180">
<template slot-scope="scope">
<el-radio-group v-model="scope.row.batchFlag">
<el-radio v-for="dict in dict.type.mes_material_batch_flag" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column label="批次数量" align="center" width="100">
<template slot-scope="scope">
<el-input-number v-model="scope.row.amount" size="small" controls-position="right" v-if="scope.row.batchFlag===BATCH_FLAG.YES"/>
</template>
</el-table-column>
<el-table-column label="条码数量" align="center" width="100">
<template slot-scope="scope">
<el-input-number v-model="scope.row.barcodeAmount" :min="1" size="small" controls-position="right" />
</template>
</el-table-column>
<el-table-column label="生产日期" align="center" width="150">
<template slot-scope="scope">
<el-date-picker v-model="scope.row.productionDate" type="date" size="small" value-format="yyyy-MM-dd" placeholder="选择生产日期" />
</template>
</el-table-column>
<el-table-column label="最晚出库日期" align="center" width="150">
<template slot-scope="scope">
<el-date-picker v-model="scope.row.lastOutstockDate" type="date" size="small" value-format="yyyy-MM-dd" placeholder="选择最晚出库日期" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.remark" type="textarea" size="small" :rows="1" placeholder="请输入备注" />
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="primary" :loading="submitLoading" @click="submitReceiveBatchForm"> </el-button>
<el-button @click="cancelReceiveBatchForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
@ -837,6 +906,7 @@ import selectOrderBind from '@//views/mes/purchaseOrder/selectOrderBind.vue';
import selectMaterial from '@//views/mes/materialinfo/selectMaterial.vue';
import selectPurchaseOrder from '@//views/mes/purchaseOrder/addPurchaseOrder.vue';
import addMultiplePurchaseOrder from '@//views/mes/purchaseOrder/addMultiplePurchaseOrder.vue';
import selectPurchaseReceiveBillBatch from '@//views/mes/purchaseReceiveBill/selectPurchaseReceiveBillBatch.vue';
export default {
name: "Barcode",
@ -846,6 +916,7 @@ export default {
'select-material': selectMaterial,
'select-purchaseOrder': selectPurchaseOrder,
'add-multiple-purchaseOrder': addMultiplePurchaseOrder,
'select-purchaseReceiveBillBatch': selectPurchaseReceiveBillBatch,
},
data() {
@ -1094,6 +1165,10 @@ export default {
},
//
checkedPurchaseOrders: [],
receiveBatchOpen: false,
receiveBatchList: [],
receiveBatchTable: [],
receiveBatchTableOpen: false,
};
},
created() {
@ -2172,6 +2247,70 @@ export default {
this.$refs["batchForm"].resetFields();
},
handleReceiveBatchAdd() {
this.receiveBatchOpen = true;
this.receiveBatchList = [];
this.receiveBatchTable = [];
},
submitReceiveBatchSelect() {
//
let selectedRows = this.$refs.receiveBatchRef.selectedRows;
if (!selectedRows || selectedRows.length === 0) {
this.$modal.msgWarning("请选择收料通知单");
return;
}
//
this.receiveBatchTable = selectedRows.map(row => ({
...row,
barcodeSpec: row.barcodeSpec || row.materialSpec,
batchFlag: '1',
amount: 1,
availableBindAmount: row.actLandAmount || '',
barcodeAmount: null,
productionDate: null,
lastOutstockDate: null,
barcodeType: '1',
remark: ''
}));
this.receiveBatchOpen = false;
this.receiveBatchTableOpen = true;
},
cancelReceiveBatchSelect() {
this.receiveBatchOpen = false;
},
submitReceiveBatchForm() {
//
// const invalidRow = this.receiveBatchTable.find(row => {
// return !row.barcodeAmount || !row.productionDate || !row.lastOutstockDate;
// });
// if (invalidRow) {
// this.$modal.msgError("");
// return;
// }
// this.receiveBatchTable.forEach((row) => {
// console.log(row)
// if (row.batchFlag === this.BATCH_FLAG.NO){
// row.amount = null;
// }
// })
this.submitLoading = true;
// API仿batchAddBarcode
batchAddBarcode(this.receiveBatchTable).then(response => {
this.$modal.msgSuccess("新增成功");
this.receiveBatchTableOpen = false;
this.getList();
}).finally(e => {
this.submitLoading = false;
});
},
cancelReceiveBatchForm() {
this.receiveBatchTableOpen = false;
this.receiveBatchTable = [];
},
}
};
</script>

@ -0,0 +1,176 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="98px">
<el-form-item label="收料单据号" prop="billNo">
<el-input
v-model="queryParams.billNo"
placeholder="请输入收料单据号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="采购订单编号" prop="poNo">
<el-input
v-model="queryParams.poNo"
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 label="条码生成标识" prop="hasBarcodeFlag">
<el-select v-model="queryParams.hasBarcodeFlag" placeholder="请选择常备条码生成标识" clearable>
<el-option
v-for="dict in dict.type.mes_material_bind_flag"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</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="purchaseReceiveBillList"
@selection-change="handleSelectionChange"
:row-key="row => row.receiveBillId"
ref="purchaseReceiveBillRef"
>
<el-table-column type="selection" width="50" />
<!-- <el-table-column label="ERPID" align="center" prop="erpId" />-->
<el-table-column label="条码生成标识" align="center" prop="hasBarcodeFlag" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_material_bind_flag" :value="scope.row.hasBarcodeFlag"/>
</template>
</el-table-column>
<el-table-column label="收料单据号" align="center" prop="billNo" />
<el-table-column label="采购订单号" align="center" prop="poNo" />
<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="actLandAmount" width="80"/>
<el-table-column label="ERP最后修改日期" align="center" prop="erpModifyDate" width="180">
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { listPurchaseReceiveBill } from "@/api/mes/purchaseReceiveBill";
export default {
name: "PurchaseReceiveBillBatch",
dicts: ['mes_material_bind_flag'],
data() {
return {
//
loading: true,
//
selectedRows: [],
selectedRowIds: [],
//
showSearch: true,
//
total: 0,
//
purchaseReceiveBillList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
erpId: null,
fentryId: null,
billNo: null,
poNo: null,
documentStatus: null,
materialId: null,
materialCode: null,
materialName: null,
materialSpec: null,
fsBillId: null,
fsId: null,
actLandAmount: null,
actReceiveAmount: null,
approveDate: null,
erpModifyDate: null,
purchaseOrgId: null,
tondBase: null,
price: null,
supplierId: null,
hasBarcodeFlag: '0',
},
//
form: {},
//
rules: {
materialCode: [
{ required: true, message: "物料编码;对应FMaterialId.FNumber不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询收料通知单列表 */
getList() {
this.loading = true;
listPurchaseReceiveBill(this.queryParams).then(response => {
this.purchaseReceiveBillList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.selectedRows = selection;
this.selectedRowIds = selection.map(item => item.receiveBillId);
},
}
};
</script>
Loading…
Cancel
Save