factory_web/src/views/wpm_bx/handover_form.vue

888 lines
23 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="titleMap[mode]"
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-form-item label="交接物料">
<el-button type="primary" @click="addMaterial" v-if="mode!=='show'">手动添加</el-button>
<el-input ref="codeInput"
placeholder="扫描交接物料"
v-model="wm_in" clearable
@change="formWminChange(wm_in)"
style="width: 300px;margin-left: 10px;"
></el-input>
<scScanner @scanResult="formWminChange"></scScanner>
</el-form-item>
<el-form-item label="总计:">
{{ totalCount }}
</el-form-item>
</el-row>
<el-row v-show="addShow">
<el-col>
<el-form-item label="交接物料">
<el-select
v-model="selectItems"
placeholder="交接物料"
filterable
multiple
clearable
@clear="clearSelect"
@change="materialChange"
style="width: 100%"
>
<el-option
v-for="item in materialOptions"
:key="item.id"
:label="item.batch"
:value="item.id"
>
<span>{{ item.batch }}</span>
<span v-if="item.material_&&item.material_.process_name">({{ item.material_.process_name }})</span>
<span v-else>(原料棒)</span>
<div style="float: right">
<span>{{ item.count }}</span>
<span v-if="item.notok_sign_name !== null" style="color: #aaaaaa">
({{ item.notok_sign_name }})
</span>
</div>
</el-option>
</el-select>
</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 :placeholder="listItem.batch" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="总数量">
<span>{{ listItem.count_cando }}</span>
</el-form-item>
</el-col>
<el-col :span="7" >
<el-form-item label="" style="position: relative;">
<el-link
:underline="false"
style="position: absolute;
top: 0;
left: -80px;
width: 80px;
height: 32px;
color: #0052d9;
line-height: 32px;"
@click="showbw($index)"
>交接数量</el-link>
<el-input-number
v-model="listItem.count"
controls-position="right"
:min="0"
:step="1"
:max="listItem.count_cando"
:disabled="mode==='show'||listItem.tracking==20"
:step-strictly="true"
style="width: 100%"
placeholder="交接数量"
@change="countChanges($index)"
>
</el-input-number>
</el-form-item>
</el-col>
<el-col :span="2" v-if="mode!=='show'">
<el-button type="danger" icon="el-icon-delete" @click="delMaterial($index)"></el-button>
</el-col>
</el-row>
<el-card shadow="false" v-if="bwVisible" style="position: relative;">
<template #header>
<div style="width: 10px;height: 35px;"></div>
<el-icon style="position: absolute;right: 10px;top: 10px;font-size: 25px;" @click="bwVisibleClose"><el-icon-circle-close /></el-icon>
</template>
<div v-for="(item2,index2) in form.handoverb[bwIndex].handoverbw" :key="item2" style="display: flex;justify-content: space-between;padding-bottom: 10px;padding-left: 10px;">
<span>{{ item2.number }}</span>
<el-button @click="deletebw(index2)" type="primary">删除</el-button>
</div>
</el-card>
<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-select
v-model="form.send_user"
placeholder="交送人"
clearable
filterable
style="width: 100%"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-if="mtype!==30&&form.handoverb.length>0">
<el-form-item label="接收工段" prop="recive_mgroup">
<el-select
v-model="form.recive_mgroup"
placeholder="接收工段"
clearable
filterable
style="width: 100%"
:disabled="type==40"
@change="getUserList2"
>
<el-option
v-for="item in mgroupOptions"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-if="mtype!==30">
<el-form-item label="接收人">
<el-select
v-model="form.recive_user"
placeholder="接收人"
clearable
filterable
style="width: 100%"
>
<el-option
v-for="item in userList2"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="更改批次">
<el-switch v-model="change_batch"></el-switch>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-if="type==50">
<el-form-item label="更改物料">
<xtSelect
:apiObj="apiObj"
:params="paramsM"
v-model="form.material_changed"
v-model:label="material_changed_name"
style="width:100%"
>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="工序" prop="process_name"></el-table-column>
<el-table-column label="规格" prop="specification"></el-table-column>
</xtSelect>
</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-col :md="12" :sm="24" v-if="change_batch">
<el-form-item label="新批次号" prop="new_batch">
<el-input v-model="form.new_batch" 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: "",
},
mgroupName: {
type: String,
default: "",
},
},
components: {
scanDialog
},
data() {
return {
selectItems:[],
yseorno: ["是", "否"],
loading: false,
mode: "add",
titleMap: {
add: "新增交接记录",
edit: "编辑交接记录",
show: "查看交接记录",
},
lists:[],//交接数组
handle_user: [],
form: {
send_date: null,
send_user: null,
send_mgroup: null,
recive_user: null,
recive_mgroup: null,
handoverb:[],
new_batch:''
},
rules: {
new_batch:[
{
required: true,
message: "请输入新批次号",
trigger: "blur",
},
],
batch: [
{
required: true,
message: "请输入批次号",
trigger: "blur",
},
],
wm: {
required: true,
message: "请选择物料",
trigger: "blur",
},
send_date: [
{
required: true,
message: "请选择送料日期",
trigger: "blur",
},
],
send_user: [
{
required: true,
message: "请选择交送人",
trigger: "blur",
},
],
send_mgroup: [
{
required: true,
message: "请选择交送工段",
trigger: "blur",
},
],
recive_user: [
{
required: true,
message: "请选择接收人",
trigger: "blur",
},
],
recive_mgroup: [
{
required: true,
message: "请选择接收工段",
trigger: "blur",
},
],
},
apiObj:this.$API.mtm.material.list,
paramsM:{
type:20,
is_hidde:true,
},
wm_in:"",
materials:[],
totalCount: 0,
deptID:'',
bwIndex:0,
userList: [],
userList2: [],
deptOptions:[],
mgroupOptions: [],
materialOptions: [],
addShow: false,
visible: false,
bwVisible:false,
scanVisible:false,
isSaveing: false,
change_batch:false,
setFiltersVisible: false,
};
},
mounted() {
let that = this;
that.form.type = that.type;
let materialObj = that.$TOOL.data.get("MATERIAL_OBJECT");
that.materialObj = materialObj;
that.form.handle_date =that.form.send_date =this.$TOOL.dateFormat2(new Date());
that.form.send_mgroup = that.mgroupId;
if(that.type==20||that.type==50){
that.form.recive_mgroup = that.mgroupId;
}
// type=10 物料交接 物料都可交接,接收工段有限制
// type=20 物料返工 不合格品交接,接收工段为该工艺流程中的工段
// type=30 物料检验 合格品交接,检验部接收
// type=40 废品入库 不合格品交接,接收工段固定为废品库
// type=50 改版 灵活无限制
//获取当前工段/部门交送人
if(that.type==20&&that.mgroupName=='废品库'){//废品交接
that.getCkUserList();
}else{
that.deptID = that.$TOOL.data.get('gx_deptID');
that.getUserList();
}
//获取交送物料
if((that.type==20&&that.mgroupName!=='废品库')||that.type==40){
that.getMaterialNotok();
}else if(that.type==20&&that.mgroupName=='废品库'){
that.getMaterialFP();
}else{
that.getMaterial();
}
if(that.type==30){
that.getDeptOptions();
}
that.getMgroupOptions();
},
methods: {
deletebw(index){
let that = this;
this.form.handoverb[this.bwIndex].handoverbw.splice(index,1);
this.form.handoverb[this.bwIndex].count--;
let totalCount = 0;
that.form.handoverb.forEach((item)=>{
totalCount += item.count;
})
that.totalCount = totalCount;
},
showbw(index){
this.bwIndex = index;
this.bwVisible = true;
},
bwVisibleClose(){
this.bwVisible = false;
},
//获取部门列表
getDeptOptions() {
this.$API.system.dept.list.req({ page: 0, type: "dept" }).then((res) => {
this.deptOptions = res;
});
},
//获取工段列表
getMgroupOptions() {
let that = this;
that.$API.mtm.mgroup.list.req({ page: 0}).then((res) => {
that.mgroupOptions = res;
if(that.type==40){
res.forEach(item=>{
if(item.name=="废品库"){
that.form.recive_mgroup = item.id;
}
})
that.getCkUserList();//废品库接收人
}else if(that.type==30){
this.getUserList3();
}
});
},
//获取车间物料
getMaterial() {
let that = this;
var req = {
page: 0,
// state:10,
mgroupx:that.mgroupId
};
if(that.type!==50){
req.state = 10;
}
that.materialOptions = [];
this.$API.wpm.wmaterial.list.req(req).then((res) => {
that.materialOptions = res;
});
},
//获取车间不合格物料
getMaterialNotok() {
let that = this;
that.materialOptions = [];
var req = {
mgroupx: that.mgroupId,
page: 0,
state__in:'20,34'
};
this.$API.wpm.wmaterial.list.req(req).then((res) => {
that.materialOptions = res;
});
},
//获取废品库物料
getMaterialFP() {
let that = this;
that.materialOptions = [];
var obj = {
page: 0,
state : 50,
state_all: 1
};
that.$API.wpm.wmaterial.list.req(obj).then((res) => {
that.materialOptions = res;
});
},
//获取交送工段人员
getUserList() {
let that = this;
let userInfo = that.$TOOL.data.get("USER_INFO");
this.$API.system.user.list.req({ depts: that.deptID, page: 0 }).then((res) => {
that.userList = res;
let arr = res.filter(item=>{
return item.id==userInfo.id;
})
if(arr.length>0){
if(that.mode=="add"){
that.form.send_user = userInfo.id;
}
}else{
let obj = {};
obj.id = userInfo.id;
obj.name = userInfo.name;
that.userList.push(obj)
if(that.mode=="add"){
that.form.send_user = userInfo.id;
}
}
});
},
//获取仓库人员
getCkUserList() {
let that = this;
this.$API.system.user.list.req({ page: 0, posts__code: "inm&check" })
.then((res) => {
if(that.type==40){
that.userList2 = [];
that.userList2 = res;
}else if(that.type==20&&that.mgroupName=='废品库'){
that.userList = [];
that.userList = res;
}
});
},
//获取接收工段人员
getUserList2() {
let that = this;
if(that.mode=="add"){
that.$API.mtm.mgroup.item.req(that.form.recive_mgroup).then((res) => {
this.$API.system.user.list.req({ depts: res.belong_dept, page: 0 }).then((res) => {
that.userList2 = res;
});
})
}else{
this.mgroupOptions.forEach(item => {
if(item.id==that.form.recive_mgroup){
this.$API.system.user.list.req({ depts: item.belong_dept, page: 0 }).then((res) => {
that.userList2 = res;
});
}
});
}
},
//获取接收部门人员
getUserList3() {
let that = this;
this.$API.system.user.list.req({ depts: that.form.recive_dept, page: 0 }).then((res) => {
that.userList2 = res;
});
},
addMaterial(){
this.addShow = true;
},
delMaterial(index){
this.selectItems.splice(index,1);
this.form.handoverb.splice(index,1);
this.countChange();
},
//显示
open(mode = "add",data,mtype) {
this.mode = mode;
this.mtype = mtype;
if(mtype==30){
this.change_batch = true;
}
this.form.handoverb = data?data:[];
this.visible = true;
return this;
},
clearSelect(){
let that = this;
that.totalCount = 0;
that.form.handoverb = [];
},
materialChange() {
let that = this;
let totalCount = 0,data = [];
if(that.selectItems.length>0){
data = that.materialOptions.filter((item) => {
return that.selectItems.indexOf(item.id)>-1;
});
let materialId = data[0].material;
let params = {
material: materialId,
type: that.type,
};
that.$API.wpm.handover.mgroups.req(params).then((res) => {
that.mgroupOptions = res;
if(res.length==1){
that.form.recive_mgroup = res[0].id;
}
})
data.forEach((item,index)=>{
item.wm = item.id;
item.count = item.count_cando;
totalCount += Number(item.count_cando);
item.tracking = item.material_.tracking;
if(item.material_.process_name){
item.process = item.material_.process_name;
}
item.handoverbw = [];
that.getWprList(item.id,index);
})
}
that.totalCount = totalCount;
that.form.handoverb = data;
},
getWprList(id,index){
console.log('id',id,'index',index);
let that = this;
let handoverbw = [];
that.$API.wpm.wpr.list.req({wm:id,page:0}).then((res) => {
res.forEach(wpritem=>{
let obj = {};
obj.wpr = wpritem.id;
obj.number = wpritem.number;
handoverbw.push(obj);
})
that.form.handoverb[index].handoverbw = handoverbw;
})
},
countChange(){
let that = this;
let totalCount = 0;
if(this.form.handoverb&&this.form.handoverb.length&&this.form.handoverb.length>0){
this.form.handoverb.forEach(item=>{
totalCount += Number(item.count);
})
that.totalCount = totalCount;
}else{
that.totalCount = 0;
}
},
countChanges(index){
if(this.form.handoverb[index]){}else{}
if(this.form.handoverb.length>0){
this.form.handoverb.forEach(item=>{
totalCount += item.count;
})
that.totalCount = totalCount;
}
},
//提交
submit() {
let that = this;
that.$refs.dialogForm.validate(async (valid) => {
if (valid) {
if(that.mtype==30){
that.form.mtype = 30;
that.form.recive_mgroup = that.form.send_mgroup;
}
//合批、分批、报废,这三个交接操作直接创建并提交
if(that.mtype==20||that.mtype==30||that.type==40){
that.$API.wpm.handover.createsubmit.req(that.form).then((res) => {
that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
}).catch((err) => {
that.isSaveing = false;
return err;
});
}else{
if (that.mode == "add") {
that.$API.wpm.handover.create.req(that.form).then((res) => {
that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
}).catch((err) => {
that.isSaveing = false;
return err;
});
} else if (that.mode == "edit") {
that.$API.wpm.handover.update.req(that.form.id, that.form).then((res) => {
that.isSaveing = false;
that.$emit("success", that.form, that.mode);
that.visible = false;
that.$message.success("操作成功");
}).catch((err) => {
that.isSaveing = false;
return err;
});
}
}
}
});
},
//表单注入数据
setData(data) {
let that = this;
this.totalCount = data.count?data.count:data.handoverb.count;
Object.assign(this.form, data);
if(data.type==30){
this.getUserList3();
}else{
this.$API.system.user.list.req({ depts: data.recive_dept, page: 0 }).then((res) => {
that.userList2 = res;
});
setTimeout(() => {
let arr =that.userList2.filter((item) => {
return item.id == data.recive_user
})
if(arr.length>0){}else{
let obj = {};
obj.id = data.recive_user;
obj.name = data.recive_user_name;
that.userList2.push(obj);
}
},500)
}
if(data.new_batch!==''&&data.new_batch!==undefined&&data.new_batch!==null){
this.change_batch = true;
}
},
//设置过滤项
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
//扫描
scanCode(){
let that = this;
that.scanVisible = true;
},
formWminChange(data){
if(data==''){
return;
}
let that = this;
if(data.indexOf('#')>-1){
let id = data.split('#')[1];
this.$API.cm.labelmat.item.req(id).then((res) => {
let arr = [];
if(that.form.handoverb&&that.form.handoverb.length>0){
that.form.handoverb.forEach((item) => {
if(item.batch == res.batch&&item.state==res.state){
arr.push(item);
}
})
}
if(arr.length>0){
that.wm_in = "";
that.$message.error("该批次已存在")
}else{
let hasArr = [];
that.materialOptions.forEach((item) => {
if(item.batch == res.batch){
hasArr.push(item);
let params = {material: item.material,type: that.type};
that.$API.wpm.handover.mgroups.req(params).then((res0) => {
that.mgroupOptions = res0;
if(res0.length==1){
that.form.recive_mgroup = res0[0].id;
}
})
let obj = {};
obj.wm = item.id;
obj.batch = item.batch;
if(item.material_.process_name){
obj.process = item.material_.process_name;
}
obj.count_cando = item.count;
obj.count = item.count;
obj.state = res.state;
obj.handoverbw = [];
that.$API.wpm.wpr.list.req({wm:item.id,page:0}).then((res) => {
let handoverbw = [];
let list = res;
list.forEach(item1=>{
let obj1 = {};
obj1.wpr = item1.id;
obj1.number = item1.number;
handoverbw.push(obj1);
})
obj.handoverbw = handoverbw;
that.form.handoverb.push(obj);
that.wm_in = "";
})
}
})
if(hasArr.length>0){}else{
that.$message.error("该批次不存在")
}
}
})
}else{//wpr的number
let arr = [];
arr = that.materialOptions.filter((item) => {
return item.batch == data;
})
if(arr.length>0){//有批次
let arr2 = [];
if(that.form.handoverb&&that.form.handoverb.length>0){
arr2 = that.form.handoverb.filter((item) => {
return item.batch == data;
})
}
if(arr2.length>0){
that.wm_in = "";
that.$message.error("该批次已存在")
}else{
let params = {material: arr[0].material,type: that.type};
that.$API.wpm.handover.mgroups.req(params).then((res0) => {
that.mgroupOptions = res0;
})
let obj2 = {};
obj2.wm = arr[0].id;
obj2.batch = arr[0].batch;
if(arr[0].material_.process_name){
obj2.process = arr[0].material_.process_name;
}
obj2.count_cando = arr[0].count;
obj2.count = arr[0].count;
that.form.handoverb.push(obj2);
that.wm_in = "";
}
}else{//单件
that.$API.wpm.wpr.list.req({number:data,page:0}).then((res) => {
if(res.length>0){
let indexs = 0,arr =[];
if( that.form.handoverb&&that.form.handoverb.length>0){
arr = that.form.handoverb.filter((item,index) => {
indexs = index;
return item.wm == res[0].wm;
})
}
//handoverb里有这个物料批次
if(arr.length>0){
//判断是否有wpr若无将wpr放进去
if(that.form.handoverb[indexs].handoverbw&&that.form.handoverb[indexs].handoverbw.length>0){
let arr1 = [];
arr1 = that.form.handoverb[indexs].handoverbw.filter((item1) => {
return item1.wpr == res[0].id;
})
if(arr1.length>0){
that.wm_in = "";
that.$message.error("该物料已存在");
}else{
let obj1 = {};
obj1.wpr = res[0].id;
obj1.number = res[0].number;
that.form.handoverb[indexs].count+=1;
that.form.handoverb[indexs].handoverbw.push(obj1);
that.wm_in = "";
}
}else{
that.form.handoverb[indexs].handoverbw = [];
let obj1 = {};
obj1.wpr = res[0].id;
obj1.number = res[0].number;
that.form.handoverb[indexs].count=1;
that.form.handoverb[indexs].handoverbw.push(obj1);
that.wm_in = "";
}
}else{//handoverb里没有有这个物料批次
that.materialOptions.forEach((item) => {
if(item.id == res[0].wm){
let params = {material: item.material,type: that.type};
that.$API.wpm.handover.mgroups.req(params).then((res1) => {
that.mgroupOptions = res1;
})
let obj2 = {};
obj2.wm = item.id;
obj2.batch = item.batch;
if(item.material_.process_name){
obj2.process = item.material_.process_name;
}
obj2.count_cando = item.count;
obj2.handoverbw = [];
obj2.count = 1;
let obj3 = {};
obj3.wpr = res[0].id;
obj3.number = res[0].number;
obj2.handoverbw.push(obj3);
// that.form.handoverb = [];
that.form.handoverb.push(obj2);
}
})
that.wm_in = "";
}
}else{
that.wm_in = "";
that.$message.error("该批次不存在")
}
})
}
}
this.countChange();
},
},
};
</script>
<style scoped>
.formTitle {
margin-bottom: 10px;
font-weight: 600;
}
.total-count{
width: 100%;
text-align: right;
height: 50px;
line-height: 50px;
}
</style>