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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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>