factory_web/src/views/wpm_bx/inmIn.vue

719 lines
20 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-container>
<el-header>
<div class="left-panel">
<el-button type="primary" @click="tomio('do_out')" v-auth="'mio.do'" v-if="route_code=='qingxi'">领料</el-button>
<el-button type="primary" v-auth="'handover.create'" @click="table_add(40)">报废</el-button>
<el-button type="primary" v-auth="'handover.create'" @click="batchConcat()">合批</el-button>
</div>
<div class="right-panel">
<el-switch
v-model="showWprList"
size="small"
class="demo-type asyncColorSwitch"
inactive-text="批次"
active-text="板段"
style="--el-switch-on-color: #67c23a; --el-switch-off-color: #0052d9"
@change="showWprListChange"
></el-switch>
<el-select
v-model="query.state"
placeholder="物料状态"
clearable
@change="handleQuery"
style="width: 250px"
>
<el-option
v-for="item in stateOptions"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
<el-input
style="margin-right: 5px"
v-model="query.search"
placeholder="名称"
clearable
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
v-if="!showWprList"
ref="table"
:apiObj="apiObj"
row-key="id"
:params="params"
:query="query"
@selection-change="selectionChange"
>
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="状态" prop="state" width="100" >
<template #default="scope">
<el-tag :type="wmState[scope.row.state]?.type">
{{wmState[scope.row.state]?.text}}
</el-tag>
</template>
</el-table-column>
<el-table-column
label="物料名称"
prop="material_name"
min-width="160"
>
<template #default="scope">
{{ scope.row.material_name }}
<span v-if="scope.row.material_origin != null">
{{ scope.row.material_origin_name }}
</span>
</template>
</el-table-column>
<el-table-column
label="已完成工序"
prop="material_name"
min-width="70"
>
<template #default="scope">
<span v-if="scope.row.material_">{{ scope.row.material_.process_name}}</span>
</template>
</el-table-column>
<el-table-column
label="原始物料"
prop="material_ofrom_name"
min-width="120"
></el-table-column>
<el-table-column
label="批次号"
prop="batch"
min-width="150"
>
<template #default="scope">
<span v-if="route_code=='pengma'" @click="rowClick(scope.row)" style="color:#0052d9;font-weight: 600;cursor: pointer;">{{scope.row.batch}}</span>
<span v-else>{{scope.row.batch}}</span>
</template>
</el-table-column>
<el-table-column
label="部门/工段"
prop="belong_dept_name"
>
<template #default="scope">
{{scope.row.belong_dept_name}}/{{scope.row.mgroup_name}}
</template>
</el-table-column>
<el-table-column
label="数量"
prop="count"
min-width="80"
>
<template #default="scope">
<span v-if="scope.row.material_&&scope.row.material_.tracking==10">{{scope.row.count}}</span>
<el-link v-else :underline="false" type="primary" @click="showWpr(scope.row)">{{scope.row.count}}</el-link>
</template>
</el-table-column>
<el-table-column
label="备注"
prop="note"
></el-table-column>
<el-table-column
label="生产中"
prop="count_working"
min-width="80"
></el-table-column>
<el-table-column
label="不合格标记"
prop="defect_name"
></el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
width="150"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
width="120"
>
<template #default="scope">
<el-link :underline="false" @click="printMaterial(scope.row,'wm')" type="primary">物料标签</el-link>
<el-link :underline="false" v-if="scope.row.material_&&scope.row.material_.tracking==10&&scope.row.state!==20" @click="tableCheckList(scope.row)" type="primary">检验记录</el-link>
<el-link
v-if="scope.row.material_&&scope.row.material_.tracking==10&&scope.row.state!==20"
:underline="false"
@click="inmCheck(scope.row)"
type="primary"
style="margin-left: 10px;"
>检验</el-link>
<el-link :underline="false" type="success"
v-if="route_code=='pengma'"
@click="handleAddWpr(scope.row)"
>混批加料</el-link>
</template>
</el-table-column>
</scTable>
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
:params="params"
:query="query"
v-if="showWprList"
@selection-change="selectionChange"
>
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="状态" prop="state" width="80" >
<template #default="scope">
<el-tag :type="wmState[scope.row.state]?.type">
{{wmState[scope.row.state]?.text}}
</el-tag>
</template>
</el-table-column>
<el-table-column
label="物料名称"
prop="material_name"
min-width="120"
>
<template #default="scope">
{{ scope.row.material_name }}
<span v-if="scope.row.material_origin != null">
{{ scope.row.material_origin_name }}
</span>
</template>
</el-table-column>
<el-table-column label="物料编号" prop="number"></el-table-column>
<el-table-column
label="批次号"
prop="wm_batch"
min-width="150"
></el-table-column>
<el-table-column
label="已完成工序"
prop="material_name"
min-width="100"
>
<template #default="scope">
{{ scope.row.process_name }}
</template>
</el-table-column>
<el-table-column label="不合格标记" prop="wprdefect">
<template #default="scope">
<span v-for="item in scope.row.wprdefect" :key="item.id">
{{ item.defect_name }}
</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
width="150"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
width="120"
>
<template #default="scope">
<el-link :underline="false" @click="printMaterial(scope.row,'wpr')" type="primary">物料标签</el-link>
</template>
</el-table-column>
</scTable>
</el-main>
<el-dialog title="选择物料" v-model="materialsVisible" width="90%">
<materials
style="height: 500px"
:materialType="materialType"
ref="materialsChose"
@choseChange="choseChange"
></materials>
</el-dialog>
<check-dialog
v-if="dialog.check"
ref="checkDialog"
:itemObj = "checkItem"
@success="handleSaveSuccess"
@closed="dialog.check = false"
>
</check-dialog>
<scrap-dialog
v-if="dialog.scrap"
ref="scrapDialog"
:type="type"
:tag="tag"
:wmItem="wmItem"
:mgroupName="mgroup_name"
:mgroupId="mgroupId"
@success="handleScrapSuccess"
@closed="dialog.scrap = false"
>
</scrap-dialog>
<showDrawer
ref="showDrawer"
v-if="visibleDrawer"
:wm="wm"
:material="wmMaterial"
@closed="visibleDrawer = false"
>
</showDrawer>
<save-dialog
v-if="dialog.inmRecord"
ref="inmRecordDialog"
:cate = "cate_type"
:process = "process"
:mgroupId = "mgroupId"
:deptId = " deptId"
@success="handleinmSuccess"
>
</save-dialog>
<handover-dialog
v-if="dialog.handover"
ref="handoverDialog"
:type="type"
:mgroupName="mgroupName"
:mgroupId="mgroupId"
@success="handleScrapSuccess"
@closed="dialog.handover = false"
>
</handover-dialog>
<wpr-dialog
v-if="dialog.wprList"
ref="inmWprDialog"
:wm = "wmId"
:process = "process"
:mgroupId = "mgroupId"
:mgroupName="mgroupName"
:ofromName = "ofrom_name"
:ofromBatch = "ofrom_batch"
@success="handleWprSuccess"
@closed="dialog.wprList = false"
></wpr-dialog>
<el-drawer v-model="limitedWatch" title="工艺路线流程图" size="80%" @closeDialog="limitedWatch = false">
<scDegra
v-if="limitedWatch"
ref="degraDialogs"
:nodes="nodes"
:edges="edges"
:rankdir="'LR'"
>
</scDegra>
</el-drawer>
</el-container>
</template>
<script>
import { wmState } from "@/utils/enum.js";
import materials from "./../mtm/materials.vue";
import checkDialog from "./check_form.vue";
import showDrawer from "./check_drawer.vue";
import scrapDialog from "./handover_form.vue";
import saveDialog from "./inm_record.vue";
import handoverDialog from "./handover_form2.vue";
import wprDialog from "./wprList.vue";
export default {
props: {
deptId: {
type: String,
default: "",
},
mgroupId: {
type: String,
default: "",
},
mgroupName: {
type: String,
default: "",
},
mgroup_code: {
type: String,
default: "",
},
process: {
type: String,
default: "",
},
},
components: {
wprDialog,
saveDialog,
materials,
checkDialog,
showDrawer,
scrapDialog,
handoverDialog
},
name: "wmaterial",
data() {
return {
wmState,
apiObj: null,
params: {
tag : 'todo',
mgroupx: "",
},
wmtype:0,
query: {
search: "",
state: null,
},
dialog: {
save: false,
check: false,
scrap: false,
permission: false,
inmRecord:false,
},
nodes:[],
edges:[],
tableData: [],
selection: [],
stateOptions:[
{ value: 10, name: "合格"},
{ value: 20, name: "不合格"},
{ value: 30, name: "返工"},
],
queryWm: {
search: "",
material: "",
},
wmItem:{},
wprParams:{
page:0,
wm: ""
},
tag:"",
wmId:"",
route_code:"",
showBatch: "",
wmMaterial:'',
cate_type:'',
materialType: "wm",
showWprList: false,
limitedWatch:false,
materialsVisible:false,
visibleDrawer: false,
wprApiObj:this.$API.wpm.wpr.list,
apiObjPrint:this.$API.cm.labelmat.fromWm,
printer_name:localStorage.getItem("printer_name"),
mgroup_name:'',
ofrom_name:'',
ofrom_batch :'',
checkItem:{},
};
},
mounted() {
let that = this;
let paths = that.$route.path;
let arr = paths.split("/");
that.route_code = arr[2];
that.params.mgroupx = that.mgroupId;
that.$TOOL.data.set('bx_deptID',that.deptId);
that.apiObj = that.$API.wpm.wmaterial.list;
},
methods: {
showWprListChange(){
let that = this;
that.apiObj = null;
if(that.showWprList){
that.apiObj = that.$API.wpm.wpr.list;
}else{
that.apiObj = that.$API.wpm.wmaterial.list;
}
},
handleWatch(row) {
let that = this;
that.$API.wpm.batchlog.dag.req({batch:row.batch}).then((res) => {
that.nodes = res.nodes;
that.edges = res.edges;
that.limitedWatch = true;
that.$nextTick(() => {
that.$refs.degraDialogs.open();
});
})
},
add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("add");
});
},
materialsChoses(str) {
this.materialType = str;
this.materialsVisible = true;
},
choseChange(data) {
this.queryWm.material = data;
this.$refs.table_wm.queryData(this.queryWm);
this.materialsVisible = false;
},
tomio(type) {
let that = this;
that.cate_type=type;
that.dialog.inmRecord = true;
that.$nextTick(() => {
that.$refs.inmRecordDialog.open("add");
});
},
//获取当前批次车间物料的检验记录
tableCheckList(row){
this.wm = row.id;
this.wmMaterial = row.material;
this.visibleDrawer = true;
this.$nextTick(() => {
this.$refs.showDrawer.open();
});
},
//表格选择后回调事件
selectionChange(selection) {
let that = this;
that.selection = selection;
//合批
if(selection.length>0){
let material = selection[0].material;
selection.forEach((item)=>{
if(item.material!==material){
that.$refs.table.toggleRowSelection(item, false);
that.$message.warning("该批次物料与前面的不一样");
}
})
}
},
//添加报废
table_add(type) {
this.dialog.scrap = true;
this.type = type;
this.$nextTick(() => {
this.$refs.scrapDialog.open("add");
});
},
//合批
batchConcat(){
this.changebatch = true;
let handoverb = [];
if(this.selection.length>0){
this.selection.forEach(item=>{
let obj = {};
obj.wm = item.id;
obj.batch = item.batch;
obj.process = item.material_.process_name;
obj.count_canhandover = item.count_canhandover;
obj.count = item.count_canhandover;
obj.label = item.defect !== null?item.batch+'('+item.material_name+')'+item.defect_name:item.batch+'('+item.material_name+')';
handoverb.push(obj)
})
}
this.type = 10;
this.tag = 'todo';
this.dialog.scrap = true;
this.$nextTick(() => {
this.$refs.scrapDialog.open("add",handoverb,30);
});
},
handleScrapSuccess(){
this.dialog.scrap = false;
this.$refs.table.refresh();
},
//出入库后刷新页面
handleinmSuccess(){
this.$refs.table.refresh();
},
//搜索
handleQuery() {
this.$refs.table.queryData(this.query);
},
showWpr(row){
let that = this;
that.wmId = row.id;
that.ofrom_batch = row.batch;
that.ofrom_name = row.material_ofrom_name;
that.dialog.wprList = true;
that.$nextTick(() => {
that.$refs.inmWprDialog.open("ins");
});
},
//本地更新数据
handleSaveSuccess(data, mode) {
this.dialog.save = false;
this.$refs.table.refresh();
},
//分批mtype:20
rowClick(row){
this.dialog.handover = true;
this.type = 10;
this.$nextTick(() => {
this.$refs.handoverDialog.open("add",row,20);
});
},
//打印物料标签
printMaterial(row,type){
let that = this;
if(that.printer_name!==''&&that.printer_name!==null&&that.printer_name!==undefined){
if(type=='wm'){
let params = {};
params.tid = row.id;
let materialname = row.material_.name + '|' + row.material_.process_name;
let specification = row.material_.specification;
if(that.route_code=='reyatuihuo'||that.route_code=='banduangunyuan'){
params.label_template_name = '工序带板段号打印模板';
that.wprParams.wm = row.id;
let numbers = ['','','','','','',''];
this.$API.wpm.wpr.list.req(that.wprParams).then((res) => {
let leng = res.length;
let slice_count = null;//获取这批板段一个板段能切几片?
let wprItem = res[0].oinfo;
for(let key in wprItem){
if(wprItem[key].name=='切片数'){
slice_count = wprItem[key].val;
}
}
if(leng>0){
let nums = leng/3;
for(let i=0;i<nums;i++){
let index = i*3;
if(index+2<leng){
numbers[i] =res[index].number+'('+slice_count+')'+res[index+1].number+'('+slice_count+')'+res[index+2].number+'('+slice_count+')';
}else if(index+1<leng){
numbers[i] =res[index].number+'('+slice_count+')'+res[index+1].number+'('+slice_count+')';
}else{
numbers[i] =res[index].number+'('+slice_count+')';
}
}
}
params.extra_data={orimaterial:row.material_ofrom_name,materialname:materialname,specification:specification,count:row.count,slicecount:slice_count,numbers0:numbers[0],numbers1:numbers[1],numbers2:numbers[2],numbers3:numbers[3],numbers4:numbers[4],numbers5:numbers[5],numbers6:numbers[6]};
that.apiObjPrint.req(params).then((res) => {
let obj = {};
obj.printer_commands = res.commands;
obj.printer_name = that.printer_name;
that.$API.wpm.prints.req(obj).then((response) => {
that.$message.success("打印成功");
});
})
})
}else{
if(that.route_code=='paiyicibang'){
params.extra_data={orimaterial:row.material_ofrom_name};
params.label_template_name = '排一次棒打印模板';
}else{
params.extra_data={orimaterial:row.material_ofrom_name,count:row.count};
params.label_template_name = '其他工序打印模板';
}
that.apiObjPrint.req(params).then((res) => {
let obj = {};
obj.printer_commands = res.commands;
obj.printer_name = that.printer_name;
that.$API.wpm.prints.req(obj).then((response) => {
that.$message.success("打印成功");
});
})
}
}else if(type=='wpr'){
that.ofromBatch = row.wm_batch;
that.ofromName = row.wm_material_ofrom_name;
let params = {};
let name = row.material_name.split('|')[0];
if(that.route_code=='paiyicibang'||that.route_code=='kunbang'){
console.log('that.route_code',that.route_code);
console.log('that.ofromName',that.ofromName);
that.$API.mtm.route.list.req({material_out:row.material,page:0}).then((res) => {
let data = res[0].params_json;
data.number = row.number;
data.name=name;
data.ofrom_name=that.ofromName;
params.data = data;
if(that.route_code=='paiyicibang'){
params.label_template_name = '排一次棒单件打印模板';
}else{
params.label_template_name = '捆棒单件打印模板';
}
that.$API.cm.labeltemplate.commands.req(params).then((res) => {
let obj = {};
obj.printer_commands = res.commands;
obj.printer_name = that.printer_name;
that.$API.wpm.prints.req(obj).then((response) => {
that.$message.success("打印成功");
});
});
})
}else{
if(that.route_code=='paiban'||that.route_code=='zhuangmo'||that.route_code=='zlybcl'||that.route_code=='tuomoceliang'||
that.route_code=='reyatuihuo'||that.route_code=='banduangunyuan'||that.route_code=='banduangunyuanhoudama'||that.route_code=='banduangunyuantuihuo'
){
let oinfo = [];
for(let key in row.oinfo){
oinfo.push(row.oinfo[key])
}
let data = {sigao:'',duibian:'',moban:'',hengya:'',istest:'否',number:row.number,name:name,ofrom_name:that.ofromName,ofrom_batch:that.ofromBatch};
if(that.route_code=='zhuangmo'||that.route_code=='zlybcl'||that.route_code=='tuomoceliang'||that.route_code=='reyatuihuo'||that.route_code=='banduangunyuan'){
params.label_template_name = '脱膜测量单件标签模板';
}else{
params.label_template_name = '排扳单件打印模板';
}
if(oinfo.length>0){
oinfo.forEach((item)=>{
if(item.name=="丝高"){
data.sigao = item.val;
}else if(item.name=="横压"){
data.hengya = item.val;
}else if(item.name=="对边"){
data.duibian = item.val;
}else if(item.name=="模具号"){
data.moban = item.val;
}else if(item.name=="实验板段"){
data.istest = item.val?'是':'否';
}
})
}
params.data = data;
}else{
params.label_template_name = '单件打印模板';
params.data = {number:row.number,name:name,oname:that.ofromName};
}
that.$API.cm.labeltemplate.commands.req(params).then((res) => {
let obj = {};
obj.printer_commands = res.commands;
obj.printer_name = that.printer_name;
that.$API.wpm.prints.req(obj).then((response) => {
that.$message.success("打印成功");
});
});
}
}
}else{
that.$message.warning("请先设置打印机");
}
},
inmCheck(row){
let that = this;
that.checkItem = row;
that.dialog.check = true;
that.$nextTick(() => {
that.$refs.checkDialog.open("add");
})
},
handleAddWpr(row){
this.dialog.scrap = true;
this.type = 10;
let obj = {};
obj.wm = row.id;
obj.batch = row.batch;
obj.mgroup = row.mgroup;
obj.material = row.material;
obj.mgroup_name = row.mgroup_name;
obj.material_name = row.material_name;
this.wmItem = obj;
this.$nextTick(() => {
this.$refs.scrapDialog.open("add",[],30);
});
},
handleWprSuccess(row){},
},
};
</script>
<style scoped></style>