factory_web/src/views/wpm_gx/mlogb_form.vue

505 lines
14 KiB
Vue

<template>
<el-dialog
:title="titleMap[mode]"
v-model="visible"
style="width: 80%;"
destroy-on-close
@closed="$emit('closed')"
>
<el-container v-loading="loading">
<el-main style="padding: 0 0 20px 0">
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
label-position="right"
label-width="100px"
>
<el-row>
<el-col>
<el-form-item label="批次号" prop="wm_in">
<xtSelect
:apiObj="apiObjM"
v-model="form.wm_in"
v-model:obj="selectObj"
:labelField="'batch'"
style="width: 100%;"
:params = "paramsM"
@change="materialBatchChange"
>
<!-- :params = "{type__in: '10,20',is_hidden: false}" -->
<el-table-column label="物料" prop="full_name">
<template #default="scope">
<span v-if="scope.row.state==20" style="color: red;border: 1px solid red;border-radius: 3px;">不合格</span>
<span v-if="scope.row.state==30" style="color: orange;border: 1px solid orange;border-radius: 3px;">返工</span>
<span>{{ scope.row.batch }}({{ scope.row.material_name }})</span>
<span v-if="scope.row.defect_name !== null" style="color: orangered">{{ scope.row.defect_name }}</span>
</template>
</el-table-column>
<el-table-column label="数量" prop="count" width="110px"></el-table-column>
</xtSelect>
</el-form-item>
<!-- <el-form-item label="批次号" prop="wm_in">
<el-select
v-model="form.wm_in"
placeholder="物料"
clearable
filterable
class="width-100"
@change="materialBatchChange"
>
<el-option
v-for="item in materialOptions"
:key="item.id"
:label="item.batch"
:value="item.id"
>
<div style="display: flex;justify-content: space-between;">
<div>
<span v-if="item.state==20" style="color: red;border: 1px solid red;border-radius: 3px;">不合格</span>
<span v-if="item.state==30" style="color: orange;border: 1px solid orange;border-radius: 3px;">返工</span>
<span>{{ item.batch }}({{ item.material_name }})</span>
<span v-if="item.defect_name !== null" style="color: orangered">{{ item.defect_name }}</span>
</div>
<span>{{ item.count }}</span>
</div>
</el-option>
</el-select>
</el-form-item> -->
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="关联任务">
<el-select
v-model="form.mtask"
placeholder="关联任务"
clearable
style="width: 100%"
@change="getMaterial"
>
<el-option
v-for="item in options"
:key="item.id"
:label="item.number"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-if="mgroupName=='黑化'||mgroupName=='退火'">
<el-form-item label="进炉数">
<el-input-number
v-model="batch_count"
class="width-100"
:disabled="true"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item :label="mgroupMtype==10?'领用数量':'批次总数'">
<el-input-number
v-model="selectObj.count_cando"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-if="mgroupMtype==10">
<el-form-item label="加工前不良" prop="count_pn_jgqbl">
<el-input-number
v-model="form.count_pn_jgqbl"
:min="0"
:disabled="true"
style="width: 100%"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="备注">
<el-input v-model="form.note"/>
</el-form-item>
</el-col>
</el-row>
<el-divider v-if="(mgroupName=='黑化'||mgroupName=='退火')&&cellsList.length>0"></el-divider>
<el-button
v-if="mgroupName=='黑化'||mgroupName=='退火'"
icon="el-icon-plus"
type="primary"
@click="cellsAdd"
></el-button>
<template v-if="mgroupName=='黑化'||mgroupName=='退火'">
<el-row v-for="(item,$index) in cellsList" :key="item">
<el-col style="display: flex;">
<el-form-item label="第" label-width="50">
<el-input-number
v-model="item.start"
:min="1"
placeholder="层数"
controls-position="right"
/>
</el-form-item>
<el-form-item label="层到第" label-width="65">
<el-input-number
v-model="item.end"
:min="1"
placeholder="层数"
controls-position="right"
/>
</el-form-item>
<el-form-item label="层,总数:" label-width="80">
<el-input-number
v-model="item.count_t"
:min="0"
placeholder="总数量"
controls-position="right"
@change="countTotalChange"
/>
</el-form-item>
<el-button
type="danger"
style="margin: 0 20px;"
@click="cellsDel($index)">删除</el-button>
</el-col>
</el-row>
</template>
<el-divider v-if="qct_defects.length>0"></el-divider>
<el-row>
<el-col :md="12" :sm="24" v-for="item in qct_defects" :key="item.id">
<el-form-item :label="item.defect_name">
<el-input-number
v-model="defectform[item.defect_name]"
:min="0"
style="width: 100%"
controls-position="right"
@change="countChange"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit">保存</el-button>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-container>
</el-dialog>
</template>
<script>
const defaultForm = {
mlog: "",
mtask: "",
batch: "",
count_pn_jgqbl:0,
count_use: 0,
};
export default {
props: {
mlog: {
type: String,
default: "",
},
mgroup: {
type: String,
default: "",
},
mgroupName:{
type: String,
default: "",
},
materialIn: {
type: String,
default: "",
},
codeText: {
type: String,
default: "",
},
is_fix: {
type: Boolean,
default: false,
},
mgroupMtype:{
type: String,
default: "",
},
mlogbdefect:{
type:Array,
default:()=>[]
},
},
emits: ["success", "closed"],
data() {
return {
loading: false,
mode: "add",
titleMap: {
add: "新增",
edit: "编辑",
},
//表单数据
form: defaultForm,
//验证规则
rules: {
wm_in: [
{
required: true,
message: "请填写批次号",
trigger: "blur",
},
],
count_use: [
{
required: true,
message: "请填写领用数量",
trigger: "blur",
},
],
},
selectObj:{count:0},
batch_count:null,
codeBatch:"",
materialFix:"",
options: [],
cellsList:[],
qct_defects:[],
materialOptions: [],
defectform:{},
visible: false,
isSaveing: false,
setFiltersVisible: false,
apiObjM:this.$API.wpm.wmaterial.list,
paramsM:{},
};
},
mounted() {
let that = this;
that.paramsM.mtaskx =that.form.mtask;
that.paramsM.mgroup = that.mgroup;
// that.paramsM.query = "{id,batch,count,material,material_name,defect_name}";
that.paramsM.page =0;
if(that.is_fix){//来料未完成的返修品&&出料已完成的返修品和不合格品
that.paramsM.tag = 'canfix';
}else{
that.paramsM.material =that.materialIn;
that.paramsM.state =10;
that.paramsM.tag = 'todo';
}
if(that.codeText!==''){
let id = that.codeText.split('#')[1];
this.$API.cm.labelmat.item.req(id).then((res) => {
that.codeBatch = res.batch;
that.paramsM.search = that.codeBatch;
that.apiObjM = that.$API.wpm.wmaterial.list;
// this.getMaterial();
}).catch((err) => {
that.apiObjM = that.$API.wpm.wmaterial.list;
// that.getMaterial();
})
}else{
that.apiObjM = that.$API.wpm.wmaterial.list;
// that.getMaterial();
}
if(that.is_fix){}else{
this.getdefects();
}
},
methods: {
open(mode="add",data) {
this.visible = true;
this.form.mtask = "";
this.form.wm_in = "";
this.form.count_use = 0;
this.form.parent = "";
if(data){
this.form = data;
this.cellsList = data.count_json_from;
}
},
getMtask() {
let that = this;
this.$API.pm.mtask.list.req({ page: 0, mgroup: that.mgroup, state: 20 }).then((res) => {
that.options = res;
});
},
//获取车间物料
getMaterial() {
let that = this;
let obj = {};
obj.mtaskx =that.form.mtask;
obj.mgroup = that.mgroup;
obj.search = that.codeBatch;
// obj.query = "{id,batch,count,material,material_name,defect_name}";
obj.page =0;
if(that.is_fix){//来料未完成的返修品&&出料已完成的返修品和不合格品
obj.tag = 'canfix';
// obj.state = 20;
// obj.state =30;
}else{
obj.material =that.materialIn;
obj.state =10;
obj.tag = 'todo';
}
this.$nextTick(()=>{
this.$API.wpm.wmaterial.list.req(obj).then((res) => {
that.materialOptions = res;
res.forEach(item => {
if(item.batch==that.codeBatch){
that.form.wm_in = item.id;
that.form.count_use = item.count;
that.batch_count = item.count;
}
if(that.form.wm_in == item.id){
that.codeBatch=item.batch;
that.batch_count = item.count;
}
});
});
})
},
getdefects(){
let that = this;
let material = that.is_fix?that.materialFix:that.materialIn;
that.$API.qm.qct.getQct.req({material: material,tag:'process'}).then((res) => {
res.qct_defects.forEach((item) => {
that.defectform[item.defect_name] = 0;
})
that.qct_defects=res.qct_defects;
let count_pn_jgqbl = 0;
if(data.mlogbdefect.length>0){
that.qct_defects.forEach(item => {
data.mlogbdefect.forEach(item2=>{
if(item.defect==item2.defect){
count_pn_jgqbl+=item2.count;
that.defectform[item.defect_name] = item2.count;
}
})
})
}
})
},
materialBatchChange(){
let that = this;
that.form.batch = that.selectObj.batch;
that.form.count_use = that.selectObj.count;
that.batch_count = that.selectObj.count;
that.materialFix = that.selectObj.material;
that.getdefects();
// that.materialOptions.forEach(item => {
// if(item.id==that.form.wm_in){
// that.form.batch = item.batch;
// that.form.count_use = item.count;
// that.batch_count = item.count;
// that.materialFix = item.material;
// that.getdefects();
// }
// });
},
//添加层组
cellsAdd(){
let that = this;
let obj = {start:null, end:null,count_t:null};
that.cellsList.push(obj)
},
//删除层组
cellsDel(index){
this.cellsList.splice(index,1)
},
countTotalChange(){
let that = this;
let sum = 0,sumTotal=0;
that.cellsList.forEach(item=>{
sum+=item.count_t;
if(sum>that.batch_count){
item.count_t=0;
that.$message.error('合计数量超过该批次总数量,请重新分配第'+item.start+'层到第'+item.end+'层的数量');
}else{
sumTotal+=item.count_t;
}
})
that.form.count_use = sumTotal;
},
cellStartChanges(){
let that = this;
let remaind = (that.form.count_use-that.form.count_pn_jgqbl)%that.count_cell;
that.cellsList = [];
for(let i=0;i<that.cells;i++){
let obj = {};
obj.floor=that.cell_start+i;
if((that.cells-i)==1&&remaind>0){
obj.count_use = remaind;
}else{
obj.count_use = that.count_cell;
}
that.cellsList.push(obj)
}
},
countCellChanges(){
this.cells =Math.ceil((this.form.count_use-this.form.count_pn_jgqbl)/this.count_cell);
this.cellStartChanges();
},
countChange() {
let that = this;
that.form.count_pn_jgqbl = 0;
that.qct_defects.forEach(item => {
if(item.defect_okcate==30){
that.form.count_pn_jgqbl += that.defectform[item.defect_name];
}
})
that.countCellChanges();
},
//表单提交方法
submit() {
let that = this;
that.$refs.dialogForm.validate(async (valid) => {
if (valid) {
that.isSaveing = true;
that.form.mlog = that.mlog;
that.form.batch = that.selectObj.batch;
that.form.count_use = that.selectObj.count_cando;
if(that.mgroupMtype==10&&that.cellsList.length>0){
that.form.count_json_from = that.cellsList;
}
let count_pn_jgqbl = 0,mlogbdefect=[];
that.qct_defects.forEach(item => {
if(that.defectform[item.defect_name]>0){
count_pn_jgqbl += that.defectform[item.defect_name] ;
let obj = {};
obj.defect = item.defect;
obj.count = that.defectform[item.defect_name];
mlogbdefect.push(obj);
}
})
that.form.mlogbdefect = mlogbdefect;
that.form.count_pn_jgqbl = count_pn_jgqbl;
console.log(that.form);
console.log(that.selectObj);
that.$API.wpm.mlogb.in.req(that.form).then((res) => {
that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
}).catch((err) => {
that.isSaveing = false;
});
}
});
},
//设置过滤项
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
},
};
</script>
<style></style>