<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>
				<el-button type="primary" @click="tomio('do_in')" v-auth="'mio.doin'">入库</el-button>
			</div>
			<div class="right-panel">
				<el-select
					v-model="query.state"
					placeholder="物料状态"
					clearable
					@change="searchStateChange"
					style="width: 100px"
				>
					<el-option
						v-for="item in stateOptions"
						:key="item.value"
						:label="item.name"
						:value="item.value"
					/>
				</el-select>
				<el-select
					v-model="query.defect"
					placeholder="不合格项"
					clearable
					@change="searchDefectChange"
					style="width: 150px"
				>
					<el-option
						v-for="item in defectOptions"
						:key="item.id"
						:label="item.name"
						:value="item.id"
					/>
				</el-select>
				<el-input
					style="width: 250px;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
				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="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="material_name"
					min-width="100"
				>
					<template #default="scope">
						{{ scope.row.material_name.split('|').at(-1) }}
					</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 @click="rowClick(scope.row)" style="color:#0052d9;font-weight: 600;cursor: pointer;">{{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="primary" 
							@click="handleWatch(scope.row)"
						>流程图</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"
			: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>
		<wpr-dialog
			v-if="dialog.wprList"
			ref="inmWprDialog"
			:wm = "wmId"
			:process = "process"
			:mgroupId = "mgroupId"
			:mgroupName="mgroupName"
			:ofromName = "ofrom_name"
			:ofromBatch = "ofrom_batch"
			@success="handleWprSuccess"
		></wpr-dialog>
		<handover-dialog
			v-if="dialog.handover"
			ref="handoverDialog"
			:type="type"
			:mgroupName="mgroupName"
			:mgroupId="mgroupId"
			@success="handleScrapSuccess"
			@closed="dialog.handover = false"
		>
		</handover-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 wprDialog from "./wprList.vue";
import handoverDialog from "./handover_form2.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 : 'done',
				mgroupx: "",
				belong_dept:''
			},
			wmtype:0,
			query: {
				search: "",
				defect: "",
				state: null,
			},
			dialog: {
				save: false,
				check: false,
				scrap: false,
				wprList: false,
				permission: false,
				inmRecord:false,
			},
			nodes:[],
			edges:[],
			tableData: [],
			selection: [],
			defectOptions: [],
			stateOptions:[
				{ value: 10, name: "合格"},
				{ value: 20, name: "不合格"},
				{ value: 30, name: "返工"},
			],
			queryWm: {
				search: "",
				material: "",
			},
			wprParams:{ 
				page:0,
				wm: "" 
			},
			number_out_last:'',
			route_code:"",
			wmMaterial:'',
			cate_type:'',
			materialType: "wm",
			showBatch: 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;
		that.getDefectOptions();
	},
	methods: {
		//获取缺陷项
		getDefectOptions(){
			let that = this;
			that.$API.wpm.wmaterial.defects.req({tag:'done',mgroup:that.mgroupId}).then((res) => {
			    that.defectOptions = res;
			})
		},
		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.dialog.scrap = true;
			this.$nextTick(() => {
				this.$refs.scrapDialog.open("add",handoverb,30);
			});
		},
		searchDefectChange(){

		},
		handleScrapSuccess(){
			this.dialog.scrap = false;
			this.$refs.table.refresh();
		},
		//出入库后刷新页面
		handleinmSuccess(){
			this.$refs.table.refresh();
		},
		handleWprSuccess(){

		},
		//搜索
		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("out");
			});
		},
		
		//分批mtype:20
		rowClick(row){
			this.dialog.handover = true;
			this.type = 10;
			this.$nextTick(() => {
				this.$refs.handoverDialog.open("add",row,20);
			});
		},
		
		//本地更新数据
		handleSaveSuccess(data, mode) {
			this.dialog.save = false;
			this.$refs.table.refresh();
		},
		//打印物料标签
		printMaterial(row,type){
			let that = this;
			if(that.printer_name!==''&&that.printer_name!==null&&that.printer_name!==undefined){
				let params = {};
					params.tid = row.id;
					let materialname = row.material_.name + '|' + row.material_.process_name;
					let specification = row.material_.specification;
					if(that.route_code=='tuomoceliang'||that.route_code=='reyatuihuo'){	
						console.log('route_code',that.route_code);
						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'){
						that.$API.mtm.route.list.req({material_out:row.material,page:0}).then((res) => {
						    let namearr = row.material_name.split('排一次棒');
							let extra_data = res[0].params_json;
							extra_data.batch = row.batch;
							extra_data.material_name=namearr[0];
							extra_data.orimaterial=row.material_ofrom_name;
							params.extra_data = extra_data;
							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{
						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{
				that.$message.warning("请先设置打印机");
			}
		},
		inmCheck(row){
			let that = this;
			that.checkItem = row;
			that.dialog.check = true;
			that.$nextTick(() => {
				that.$refs.checkDialog.open("add");
			
			})
		},
	},
};
</script>
<style scoped></style>
