You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

462 lines
16 KiB
Vue

<template>
<div class="app-container">
<el-form ref="form" :model="form" label-width="110px">
<el-row>
<el-col :span="12">
<el-form-item label="采购订单编号" prop="poNo">
<el-input v-model="form.poNo" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="订单计划数量" prop="orderAmount">
<el-input v-model="form.orderAmount" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="form.materialName" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="物料规格" prop="materialSpec">
<el-input v-model="form.materialSpec" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格参数" prop="specificationParameter">
<el-input v-model="form.specificationParameter" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="审核日期" prop="approveDate">
<el-input v-model="form.approveDate" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划交货日期" prop="planDeliveryDate">
<el-input v-model="form.planDeliveryDate" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="订单状态" prop="orderStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_purchase_order_status" :value="form.orderStatus"/>
</template>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="完成日期" prop="completeDate">
<el-input v-model="form.completeDate" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="源单编号" prop="srcBillNo">
<el-input v-model="form.srcBillNo" disabled/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="京源项目" prop="tondBase">
<el-input v-model="form.tondBase" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="center">采购订单绑定信息</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddMesOrderBind"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeleteMesOrderBind"></el-button>
</el-col>
</el-row>
<el-table :data="mesOrderBindList" :row-class-name="rowMesOrderBindIndex"
@selection-change="handleMesOrderBindSelectionChange" ref="mesOrderBind">
<el-table-column type="selection" width="50" align="center"/>
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="安全库存标识" prop="safeFlag" width="150">
<template slot-scope="scope">
<el-radio-group v-model="scope.row.safeFlag" @input="changeSafeFlag(scope.row)"
:disabled="scope.row.orderBindId">
<el-radio
v-for="dict in dict.type.mes_safe_flag"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column label="销售订单" prop="saleOrderCode" width="230">
<template slot-scope="scope">
<el-input v-model="scope.row.saleOrderCode" placeholder="请点击右侧选择销售订单" readonly style="width:200px">
<el-button slot="append" icon="el-icon-search"
v-if="!scope.row.orderBindId && scope.row.safeFlag=== SAFE_FLAG.NO"
@click="handleSaleOrderAdd(scope.row)"></el-button>
</el-input>
</template>
</el-table-column>
<el-table-column label="成品编码" prop="productCode" width="150">
</el-table-column>
<el-table-column label="成品名称" prop="productName" width="150">
</el-table-column>
<el-table-column label="成品规格" prop="productSpec" width="150">
</el-table-column>
<el-table-column label="绑定数量" prop="bindAmount" width="260">
<template slot-scope="scope">
<el-input-number v-model="scope.row.bindAmount" placeholder="请输入绑定数量">
</el-input-number>
</template>
</el-table-column>
<el-table-column label="条码数量" prop="barcodeAmount" width="150">
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="close"> </el-button>
</div>
<!-- 添加物料信息对话框 -->
<el-dialog title="选择销售订单" :visible.sync="saleOrderOpen" append-to-body>
<select-saleOrder ref="saleOrderRef" :defineData="purchaseOrderData"></select-saleOrder>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSaleOrderForm"> </el-button>
<el-button @click="saleOrderOpen = false"> </el-button>
</div>
</el-dialog>
<!-- 销售订单绑定采购订单信息对话框 -->
<el-dialog title="采购订单绑定销售订单信息" :visible.sync="orderBindDialogVisible" append-to-body>
<order-binds ref="orderBindsRef" :defineData="orderBindsData"
v-if="orderBindDialogVisible"></order-binds>
</el-dialog>
</div>
</template>
<script>
import {getPurchaseOrder, bindOrder, deleteOrderBind,getOrderBinds} from "@/api/mes/purchaseOrder";
import selectSaleOrder from '@//views/mes/purchaseOrder/selectSaleOrder.vue';
import orderBinds from "@/views/mes/saleOrder/orderBinds.vue";
export default {
name: "PurchaseOrder",
components: {
'select-saleOrder': selectSaleOrder,
'order-binds': orderBinds,
},
dicts: ['active_flag', 'mes_purchase_order_status', 'document_status', 'mes_safe_flag'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
indexes: [],
// 子表选中数据
checkedMesOrderBind: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 采购订单信息表格数据
purchaseOrderList: [],
// 采购销售订单绑定信息;销售订单绑定采购订单明细信息表格数据
mesOrderBindList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
erpId: null,
fentryId: null,
poNo: null,
documentStatus: null,
materialId: null,
materialCode: null,
materialName: null,
orderAmount: null,
completeAmount: null,
approveDate: null,
erpModifyDate: null,
planDeliveryDate: null,
beginDate: null,
endDate: null,
orderStatus: null,
completeDate: null,
isFlag: null,
unitId: null,
stockUnitId: null,
priceUnitId: null,
auxPropId: null,
srcBillNo: null,
purchaseOrgId: null,
tondBase: null,
supplierId: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
materialCode: [
{required: true, message: "物料编码;对应FMaterialId.FNumber不能为空", trigger: "blur"}
],
orderAmount: [
{required: true, message: "订单计划数量;对应FQty不能为空", trigger: "blur"}
],
isFlag: [
{required: true, message: "是否标识1-是0-否不能为空", trigger: "change"}
],
},
saleOrderOpen: false,
purchaseOrderData: {},
SAFE_FLAG: {
YES: '1',
NO: '0'
},
orderBindDialogVisible: false,
orderBindsData: {},
};
},
activated() {
this.getPurchaseOrder();
},
methods: {
getPurchaseOrder() {
const purchaseOrderId = this.$route.params && this.$route.params.purchaseOrderId;
const materialSpec = this.$route.params && this.$route.params.materialSpec;
getPurchaseOrder(purchaseOrderId).then(response => {
this.form = response.data;
this.form.materialSpec = materialSpec;
this.getOrderBinds();
});
},
getOrderBinds(){
getOrderBinds({purchaseOrderId: this.form.purchaseOrderId}).then(response => {
this.mesOrderBindList = response.data;
});
},
isPositiveInteger(value) {
// 使用正则表达式匹配正整数
return /^[0-9]\d*$/.test(value);
},
/** 提交按钮 */
submitForm() {
this.loading = true;
let totalBindAmount = 0;
for (let i = 0; i < this.mesOrderBindList.length; i++) {
let mob = this.mesOrderBindList[i];
let bindAmount = mob.bindAmount ? parseInt(mob.bindAmount) : 0;
let barcodeAmount = mob.barcodeAmount ? parseInt(mob.barcodeAmount) : 0;
if (!mob.safeFlag) {
this.$modal.msgError("序号为" + (i + 1) + ",请选择安全标识");
return;
}
if (mob.safeFlag === this.SAFE_FLAG.NO && !mob.saleOrderId) {
this.$modal.msgError("序号为" + (i + 1) + ",请选择销售订单");
return;
}
if (bindAmount <= 0) {
this.$modal.msgError("序号为" + (i + 1) + ",绑定数量须为大于0");
return;
}
if (bindAmount < barcodeAmount) {
this.$modal.msgError("序号为" + (i + 1) + ",绑定数量不能小于条码数量");
return;
}
totalBindAmount = totalBindAmount + bindAmount;
}
if (totalBindAmount > this.form.orderAmount) {
this.$modal.msgError("现总绑定数量为" + totalBindAmount + ",不能大于订单计划数量" + this.form.orderAmount);
return;
}
this.form.mesOrderBindList = this.mesOrderBindList;
if (this.form.purchaseOrderId != null) {
bindOrder(this.form).then(response => {
this.$modal.msgSuccess("绑定成功");
this.close();
}).catch(error => {
this.getPurchaseOrder();
});
}
},
/** 采购销售订单绑定信息;销售订单绑定采购订单明细信息序号 */
rowMesOrderBindIndex({row, rowIndex}) {
row.index = rowIndex + 1;
},
/** 采购销售订单绑定信息;销售订单绑定采购订单明细信息添加按钮操作 */
handleAddMesOrderBind() {
// this.open=true;
let obj = {};
obj.safeFlag = "";
obj.saleOrderId = "";
obj.saleOrderCode = "";
obj.materialId = this.form.materialId;
obj.materialCode = this.form.materialCode;
obj.materialName = this.form.materialName;
obj.productId = "";
obj.productCode = "";
obj.productName = "";
obj.bindAmount = "";
obj.barcodeAmount = 0;
obj.remark = "";
this.mesOrderBindList.push(obj);
},
/** 采购销售订单绑定信息;销售订单绑定采购订单明细信息删除按钮操作 */
handleDeleteMesOrderBind() {
if (this.checkedMesOrderBind.length === 0) {
this.$modal.msgError("请先选择要删除的采购订单绑定信息");
} else {
let ids = this.ids;
ids = ids.filter(item => item != null && item !== '')
this.$modal.confirm('是否确认删除序号为"' + this.indexes + '"的数据项?').then(function () {
if (ids.length > 0) {
return deleteOrderBind(ids);
}
}).then(() => {
this.$modal.msgSuccess("删除成功");
const mesOrderBindList = this.mesOrderBindList;
const checkedMesOrderBind = this.checkedMesOrderBind;
this.mesOrderBindList = mesOrderBindList.filter(function (item) {
return checkedMesOrderBind.indexOf(item.index) == -1
});
}).catch(() => {
});
}
},
/** 复选框选中数据 */
handleMesOrderBindSelectionChange(selection) {
this.checkedMesOrderBind = selection.map(item => item.index)
this.ids = selection.map(item => item.orderBindId)
this.indexes = selection.map(item => item.index)
},
handleSaleOrderAdd(row) {
this.editedRow = row;
this.purchaseOrderData = {
materialId: row.materialId,
}
this.saleOrderOpen = true;
},
/** 提交选择销售订单信息按钮 */
submitSaleOrderForm() {
let selectedRow = this.$refs.saleOrderRef.selectedRow;
let filteredWithIndex = this.mesOrderBindList
.filter(item => item.saleOrderId === selectedRow.saleOrderId)
.map((item, newIndex) => ({value: item, originalIndex: this.mesOrderBindList.indexOf(item)})); // 映射为包含值和原索引的对象
// let sameSaleOrder = this.mesOrderBindList.filter(item => item.saleOrderId === selectedRow.saleOrderId)
if (filteredWithIndex && filteredWithIndex.length > 0) {
this.$modal.msgError("序号为" + (filteredWithIndex[0].originalIndex + 1) + "已经选择此销售订单");
return;
}
this.editedRow.saleOrderId = selectedRow.saleOrderId;
this.editedRow.saleOrderCode = selectedRow.saleorderCode;
this.editedRow.productCode = selectedRow.materialCode;
this.editedRow.productName = selectedRow.materialName;
this.editedRow.productId = selectedRow.materialId;
this.saleOrderOpen = false;
},
changeSafeFlag(row) {
if (row.safeFlag === this.SAFE_FLAG.YES) {
let filteredWithIndex = this.mesOrderBindList
.filter(item => item.safeFlag === this.SAFE_FLAG.YES && item.index!== row.index)
.map((item, newIndex) => ({value: item, originalIndex: this.mesOrderBindList.indexOf(item)})); // 映射为包含值和原索引的对象
// let sameSaleOrder = this.mesOrderBindList.filter(item => item.saleOrderId === selectedRow.saleOrderId)
if (filteredWithIndex && filteredWithIndex.length > 0) {
row.safeFlag = this.SAFE_FLAG.NO;
this.$modal.msgError("序号为" + (filteredWithIndex[0].originalIndex + 1) + "已经选择安全库存");
return;
}
row.saleOrderId = "";
row.saleOrderCode = "";
row.productCode = "";
row.productName = "";
row.productId = "";
}
},
/** 关闭按钮 */
close() {
const obj = {path: "/mes/plan/purchaseOrder", query: {t: Date.now(), pageNum: this.$route.query.pageNum}};
this.$tab.closeOpenPage(obj);
},
// 采购订单绑定销售订单信息页面
handleOrderBinds() {
this.orderBindDialogVisible = true
this.orderBindsData = {
purchaseOrderId: this.form.purchaseOrderId,
}
},
}
};
</script>