factory_web/src/views/wpm_bx/handover_form2.vue

367 lines
9.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog
title="分批"
v-model="visible"
width="1000px"
:size="1000"
destroy-on-close
@closed="$emit('closed')"
>
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
label-width="80px"
>
<el-row>
<el-col>
<el-form-item label="物料批次:" label-width="100px">
<b>{{batchOrign.batch}}</b>
<span style="width: 80px;margin-left:60px;">物料总数:</span>
<b>{{batchOrign.count}} </b>
<el-button type="primary" @click="batchAdd" style="margin-left: 40px;">分批</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row v-for="(listItem,$index) in form.handoverb" :key="listItem">
<el-col :span="10">
<el-form-item label="批次号">
<el-input v-model="listItem.batch" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="14">
<span style="margin: 0 0 0 20px;">选择物料:</span>
<el-input ref="codeInput"
placeholder="扫描交接物料"
v-model="listItem.wm_in" clearable
style="width: 120px;margin: 0 10px;"
@change="formWminChange($index,listItem.wm_in)"
></el-input>
<el-select
v-model="listItem.wpr"
placeholder="选择交接物料"
@change="wm_inChange($index)"
style="width: 140px;">
<el-option
v-for="item in wprOptions"
:disabled="item.disabled"
:key="item.id"
:label="item.number"
:value="item.id"
>
</el-option>
</el-select>
<span style="margin: 0 20px;">数量:{{ listItem.count }}</span>
<el-button v-if="mode!=='show'" type="danger" icon="el-icon-delete" @click="delMaterial($index)"></el-button>
</el-col>
<el-col :span="24" style="padding-left: 80px;margin-bottom: 20px;margin-top: -5px;">
<div v-for="(item2,index2) in form.handoverb[$index].handoverbw" :key="item2.wpr" class="wprItem">
<span>{{ item2.number }}</span>
<el-icon class="circleCloseFilled" @click="deleteWpr($index,index2,item2.wpr)"><el-icon-circleClose-filled /></el-icon>
</div>
</el-col>
</el-row>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="交送日期" prop="send_date">
<el-date-picker
v-model="form.send_date"
type="date"
placeholder="选择时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="处理备注">
<el-input v-model="form.note" placeholder="处理备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-footer v-if="mode!=='show'">
<el-button type="primary" v-loading="isSaveing" @click="submit">确定</el-button>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-dialog>
</template>
<script>
import scanDialog from "./../template/scan.vue";
export default {
emits: ["success", "closed"],
props: {
type: {
type: Number,
default: 10,
},
mgroupId: {
type: String,
default: "",
},
process:{
type:String,
default:""
}
},
components: {
scanDialog
},
data() {
return {
mode: "add",
wm_in:"",
mtype:20,
lastBatchNum:1,
addBactchNum:1,
form: {
send_date: null,
send_user: null,
send_mgroup: null,
recive_user: null,
recive_mgroup: null,
handoverb:[],
},
rules: {
batch: [
{
required: true,
message: "请输入批次号",
trigger: "blur",
},
],
wm: {
required: true,
message: "请选择物料",
trigger: "blur",
},
},
batchOrign:{},
wprOptions: [],
materialOptions: [],
loading: false,
visible: false,
isSaveing: false,
setFiltersVisible: false,
};
},
mounted() {
let that = this;
that.form.type = that.type;
that.form.handle_date = that.form.send_date = that.$TOOL.dateFormat2(new Date());
that.form.send_mgroup = that.form.recive_mgroup = that.mgroupId;
let userInfo = that.$TOOL.data.get("USER_INFO");
that.form.send_user = that.form.recive_user= userInfo.id;
},
methods: {
getWpr(id){
let that = this;
that.$API.wpm.wpr.list.req({page:0,wm:id}).then((res) => {
that.wprOptions = res;
});
},
getNum(batch){
let that = this;
that.$API.wpm.batchlog.batchesTo.req({batch:batch}).then((res) => {
if(res.last_batch_num!==null){
that.lastBatchNum = res.last_batch_num;
that.addBactchNum = res.last_batch_num+1;
}else{
that.lastBatchNum = 0;
that.addBactchNum = 1;
}
let obj = { };
obj.wm = that.batchOrign.id;
obj.batch = that.batchOrign.batch+"-"+that.addBactchNum;
that.addBactchNum++;
obj.count = 0;
obj.wm_in = "";
obj.handoverbw=[];
that.form.handoverb.push(obj);
})
},
//显示
open(mode = "add",data,mtype) {
this.mode = mode;
this.form.mtype = mtype;
this.batchOrign = data;
this.getWpr(data.id);
this.getNum(data.batch);
this.visible = true;
return this;
},
wm_inChange(index){
let that = this;
//放入对应的行中的handoverb中并且在列表中disabled
that.wprOptions.forEach(item=>{
if(item.id == that.form.handoverb[index].wpr){
let obj = {};
obj.number = item.number;
obj.wpr = item.id;
item.disabled = true;
that.form.handoverb[index].handoverbw.push(obj);
that.form.handoverb[index].wpr = '';
}
})
that.form.handoverb[index].count = that.form.handoverb[index].handoverbw.length;
},
formWminChange(index,number){
let that = this;
let arrs = number.split(" ");
let barchArrs = [];
that.form.handoverb[index].wm_in = "";
if(arrs.length>1){
that.form.handoverb[index].wpr = '';
arrs.forEach(arr=>{
that.wprOptions.forEach(item=>{
if(item.number.indexOf(arr) > -1&&!item.disabled){
item.disabled = true;
let obj = {};
obj.number = item.number;
obj.wpr = item.id;
barchArrs.push(arr);
that.form.handoverb[index].handoverbw.push(obj);
that.form.handoverb[index].count = that.form.handoverb[index].handoverbw.length;
}
})
})
//如果arrs里有不是这个批次的wpr,提示错误
let diff = arrs.filter(item => !barchArrs.includes(item));
if(diff.length>0){
that.$confirm("物料"+diff.join(",")+"不在该批次中", "提示", {type: "warning",}).then(() => {});
}
}else{
//放入对应的行中的handoverb中并且在列表中disabled
that.wprOptions.forEach(item=>{
if(item.number.indexOf(arr) > -1){
if(item.disabled){
that.$message.error("该物料已被分配");
that.form.handoverb[index].wpr = '';
}else{
item.disabled = true;
let obj = {};
obj.number = item.number;
obj.wpr = item.id;
that.form.handoverb[index].handoverbw.push(obj);
that.form.handoverb[index].count = that.form.handoverb[index].handoverbw.length;
that.form.handoverb[index].wpr = '';
}
}
})
}
this.$refs.codeInput.focus();
},
deleteWpr(index1,index2,wpr){
let that = this;
that.wprOptions.forEach(item=>{
if(item.id == wpr){
item.disabled = false;
}
})
that.form.handoverb[index1].handoverbw.splice(index2,1);
that.form.handoverb[index1].count = that.form.handoverb[index1].handoverbw.length;
},
batchAdd(){
let that = this;
let obj = { };
obj.wm_in = "";
obj.wm = that.batchOrign.id;
obj.batch = that.batchOrign.batch+"-"+that.addBactchNum;
that.addBactchNum++;
obj.count =0;
obj.handoverbw=[];
that.form.handoverb.push(obj)
},
delMaterial(index){
let that = this;
//解除该记录的wpr的disabled
if(that.form.handoverb[index].handoverbw.length>0){
that.form.handoverb[index].handoverbw.forEach(item=>{
that.wprOptions.forEach(item2=>{
if(item2.id == item.wpr){
item2.disabled = false;
}
})
})
}
that.form.handoverb.splice(index,1);
},
//提交
submit() {
let that = this;
that.$refs.dialogForm.validate(async (valid) => {
if (valid) {
let total = 0;
if(this.form.handoverb.length>0){
this.form.handoverb.forEach(item=>{
total += item.count;
})
}
if(total>that.totalCount){
that.$message.error("分配数量不能大于总数量");
}else{
that.form.wm = that.batchOrign.id;
if (that.mode == "add") {
that.$API.wpm.handover.create.req(that.form).then((res) => {
that.$API.wpm.handover.submit.req(res.id).then((res1) => {
that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
});
}).catch((err) => {
//可以处理校验错误
that.isSaveing = false;
return err;
});
}
}
}
});
},
//表单注入数据
setData(data) {
Object.assign(this.form, data);
console.log('this.form',this.form);
},
//设置过滤项
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
},
};
</script>
<style scoped>
.formTitle {
margin-bottom: 10px;
font-weight: 600;
}
.total-count{
width: 100%;
text-align: right;
height: 50px;
line-height: 50px;
}
.wprItem{
background: #eeeeee;
padding: 0 10px;
border-radius: 5px;
display: inline-block;
position: relative;
height: 30px;
line-height: 30px;
margin-right: 20px;
margin-top: 5px;
}
.circleCloseFilled{
position: absolute;
top: -7px;
right: -10px;
color: red;
font-size: 20px;
}
</style>