<template> <div class="container ver-center"> <el-row type="flex" justify="center" class="height-30"> <el-col :span="5" class="height-100 ver-justify"> <el-row type="flex" justify="space-between" class="btns-wrap"> <el-col :span="9" class="height-100 ver-justify"> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT1' in pointState)}" @click="showPop(3, 'OUT1')">Container</div> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT1' in pointState)}" @click="showPop(4, 'OUT1')">Scaner</div> </el-col> <el-col :span="13" class="height-100"> <div class="s-btn-2" :class="{'s-btn-2_dis': !('OUT1' in pointState)}"> <p class="p1">OUT1</p> <p v-show="'OUT1' in pointState" class="p2">{{ pointState.OUT1 }}</p> </div> </el-col> </el-row> <el-row type="flex" justify="space-between" class="btns-wrap"> <el-col :span="9" class="height-100 ver-justify"> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT3' in pointState)}" @click="showPop(3, 'OUT3')">Container</div> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT3' in pointState)}" @click="showPop(4, 'OUT3')">Scaner</div> </el-col> <el-col :span="13" class="height-100"> <div class="s-btn-2" :class="{'s-btn-2_dis': !('OUT3' in pointState)}"> <p class="p1">OUT3</p> <p v-show="'OUT3' in pointState" class="p2">{{ pointState.OUT3 }}</p> </div> </el-col> </el-row> </el-col> <el-col :span="9" class="height-100 ver-justify mg2"> <div class="m-content ver-center" @click="showPop(1)"> <p>{{ JSON.stringify(pkObj) !== '{}' ? pkObj.label : 'MACHINE' }}</p> </div> <el-row type="flex" justify="space-between" class="btns-wrap-2"> <el-col :span="7" class="height-100"> <div class="s-btn-2" :class="{'s-btn-2_dis': !('N1' in pointState)}" @click="showPop(2, 'N1')"> <p class="p1">N1</p> <p v-show="'N1' in pointState" class="p2">{{ pointState.N1 }}</p> </div> </el-col> <el-col :span="4" class="height-100 ver-center"> <div class="s-btn-1" :class="{'s-btn-1_dis': !('N1' in pointState)}" @click="showPop(5, 'N1')">Back</div> </el-col> <el-col :span="7" class="height-100"> <div class="s-btn-2" :class="{'s-btn-2_dis': !('N2' in pointState)}" @click="showPop(2, 'N2')"> <p class="p1">N2</p> <p v-show="'N2' in pointState" class="p2">{{ pointState.N2 }}</p> </div> </el-col> <el-col :span="4" class="height-100 ver-center"> <div class="s-btn-1" :class="{'s-btn-1_dis': !('N2' in pointState)}" @click="showPop(5, 'N2')">Back</div> </el-col> </el-row> </el-col> <el-col :span="5" class="height-100 ver-justify"> <el-row type="flex" justify="space-between" class="btns-wrap"> <el-col :span="13" class="height-100"> <div class="s-btn-2" :class="{'s-btn-2_dis': !('OUT2' in pointState)}"> <p class="p1">OUT2</p> <p v-show="'OUT2' in pointState" class="p2">{{ pointState.OUT2 }}</p> </div> </el-col> <el-col :span="9" class="height-100 ver-justify"> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT2' in pointState)}" @click="showPop(3, 'OUT2')">Container</div> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT2' in pointState)}" @click="showPop(4, 'OUT2')">Scaner</div> </el-col> </el-row> <el-row type="flex" justify="space-between" class="btns-wrap"> <el-col :span="13" class="height-100"> <div class="s-btn-2" :class="{'s-btn-2_dis': !('OUT4' in pointState)}"> <p class="p1">OUT4</p> <p v-show="'OUT4' in pointState" class="p2">{{ pointState.OUT4 }}</p> </div> </el-col> <el-col :span="9" class="height-100 ver-justify"> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT4' in pointState)}" @click="showPop(3, 'OUT4')">Container</div> <div class="s-btn-1" :class="{'s-btn-1_dis': !('OUT4' in pointState)}" @click="showPop(4, 'OUT4')">Scaner</div> </el-col> </el-row> </el-col> </el-row> <div class="pop-wraper" :class="{'popshow': show, 'pophide': !show, 'pop-wraper-1': type === 3 || type === 4 || type === 5}"> <div v-show="type === 1" class="pop-h1">选择设备</div> <div v-show="type === 1" class="pop-grid"> <el-table ref="singleTable" :data="machineData" height="100%" highlight-current-row style="width: 100%" @current-change="handleCurrentChange1" > <el-table-column prop="label" label="设备号" /> <el-table-column prop="value" label="设备工序" /> </el-table> </div> <el-row v-show="type === 1" class="pop-btns"> <el-col :span="3" :offset="6" class="height-100"> <div class="s-btn-1 s-btn-3" @click="toSure1">确定</div> </el-col> <el-col :span="3" :offset="6" class="height-100"> <div class="s-btn-1 s-btn-3" @click="show = false, vechineList = []">取消</div> </el-col> </el-row> <div v-show="type === 2" class="pop-grid"> <el-row type="flex" justify="space-between"> <el-col :span="24"> <el-table ref="singleTable" :data="n1List" height="100%" highlight-current-row style="width: 100%" @current-change="handleCurrentChange2" > <el-table-column prop="order_code" label="订单号" /> <el-table-column prop="region_code" label="工序" /> <el-table-column prop="material_id" label="物料号" /> <el-table-column prop="material_type" label="物料类型" /> <el-table-column prop="material_qty" label="物料数量" /> <el-table-column prop="due_date" label="交期时间" /> <el-table-column prop="custom" label="客户编码" /> <el-table-column prop="point_code" label="点位编码" /> </el-table> </el-col> </el-row> </div> <el-row v-show="type === 2" type="flex" class="pop-btns" justify="center"> <el-col :span="3" class="height-100" style="margin: 0 1%;"> <div class="s-btn-1 s-btn-3" @click="show = false, vechineList = []">取消</div> </el-col> <el-col :span="3" class="height-100" style="margin: 0 1%;"> <div class="s-btn-1 s-btn-3" @click="toCall">叫料</div> </el-col> </el-row> <div v-show="type === 3" class="pop-grid"> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">点位</el-col> <el-col :span="18"><input v-model="emptyObj.device_code" type="text" class="p-value" disabled></el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">托盘类型</el-col> <el-col :span="18" class="select-wraper"> <el-select v-model="val1" placeholder="请选择"> <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" class="option-wraper" /> </el-select> </el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">设备工序</el-col> <el-col :span="18"><input v-model="emptyObj.regin_code" type="text" class="p-value" disabled></el-col> <!-- <el-col :span="18" class="select-wraper"> <el-select v-model="val2" placeholder="请选择"> <el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value" class="option-wraper" /> </el-select> </el-col> --> </el-row> </div> <el-row v-show="type === 3" class="pop-btns"> <el-col :span="5" :offset="5" class="height-100"> <div class="s-btn-1 s-btn-3" @click="toSure3">确定</div> </el-col> <el-col :span="5" :offset="5" class="height-100"> <div class="s-btn-1 s-btn-3" @click="show = false">取消</div> </el-col> </el-row> <div v-show="type === 4" class="pop-grid"> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">地面点位</el-col> <el-col :span="18"><input v-model="sendObj.device_code" type="text" class="p-value" disabled></el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">订单编号</el-col> <el-col :span="18"><input v-model="sendObj.order_code" type="text" class="p-value"></el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">合格数量</el-col> <el-col :span="18"><input v-model="sendObj.material_qty" type="number" class="p-value"></el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">设备工序</el-col> <el-col :span="18"><input v-model="sendObj.regin_code" type="text" class="p-value" disabled></el-col> <!-- <el-col :span="18" class="select-wraper"> <el-select v-model="val2" placeholder="请选择"> <el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value" class="option-wraper" /> </el-select> </el-col> --> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">载具编码</el-col> <el-col :span="18"><input v-model="sendObj.vehicle_code" type="text" class="p-value"></el-col> </el-row> <el-row class="filter-wraper"> <el-col :span="1" :offset="6"><el-checkbox v-model="check1" /></el-col> <el-col :span="5" class="p-label">是否报功</el-col> <el-col :span="1" :offset="3"><el-checkbox v-model="check2" /></el-col> <el-col :span="5" class="p-label">指定外协区</el-col> </el-row> </div> <el-row v-show="type === 4" class="pop-btns"> <el-col :span="5" :offset="5" class="height-100"> <div class="s-btn-1 s-btn-3" @click="toSure4">确定</div> </el-col> <el-col :span="5" :offset="5" class="height-100"> <div class="s-btn-1 s-btn-3" @click="show = false">取消</div> </el-col> </el-row> <div v-show="type === 5" class="pop-grid"> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">地面点位</el-col> <el-col :span="18"><input v-model="backObj.device_code" type="text" class="p-value" disabled></el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">物料数量</el-col> <el-col :span="18"><input v-model="backObj.material_qty" type="number" class="p-value"></el-col> </el-row> <el-row class="filter-wraper" type="flex" justify="space-between"> <el-col :span="5" class="p-label">设备工序</el-col> <el-col :span="18"><input v-model="backObj.regin_code" type="text" class="p-value" disabled></el-col> <!-- <el-col :span="18" class="select-wraper"> <el-select v-model="val2" placeholder="请选择"> <el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value" class="option-wraper" /> </el-select> </el-col> --> </el-row> </div> <el-row v-show="type === 5" class="pop-btns"> <el-col :span="5" :offset="5" class="height-100"> <div class="s-btn-1 s-btn-3" @click="toSure5">确定</div> </el-col> <el-col :span="5" :offset="5" class="height-100"> <div class="s-btn-1 s-btn-3" @click="show = false">取消</div> </el-col> </el-row> </div> <div v-show="show" class="modal" /> </div> </template> <script> import crudProduceScreen from './produceScreen' export default { data() { return { type: null, show: false, machineData: [], n1List: [], buttonName: '', vechineList: [], currentRow1: null, currentRow2: null, pkObj: {}, checked: false, pointState: {}, emptyObj: {}, sendObj: {}, backObj: {}, val1: '', options1: [], val2: '', options2: [], check1: false, check2: false } }, created() { crudProduceScreen.vehicleType().then(res => { this.options1 = [...res.content] }) }, methods: { showPop(type, name) { this.type = type this.buttonName = name if (type === 1) { crudProduceScreen.regionList().then(res => { this.machineData = [...res.content] this.show = true this.options2 = [...res.content] }) } else if (type === 2 && name in this.pointState) { crudProduceScreen.regionOrder(this.pkObj.value, this.pointState[name]).then(res => { this.n1List = [...res.content] this.vechineList = [] this.show = true }) } else if (type === 3 && name in this.pointState) { this.emptyObj = {} this.val1 = '' // this.val2 = '' this.show = true this.emptyObj.device_code = this.pointState[name] this.emptyObj.regin_code = this.pkObj.value } else if (type === 4 && name in this.pointState) { this.sendObj = {} // this.val2 = '' this.check1 = false this.check2 = false this.show = true this.sendObj.order_code = '' this.sendObj.material_qty = null this.sendObj.vehicle_code = '' this.sendObj.device_code = this.pointState[name] this.sendObj.regin_code = this.pkObj.value } else if (type === 5 && name in this.pointState) { this.backObj = {} // this.val2 = '' this.show = true this.backObj.material_qty = null this.backObj.device_code = this.pointState[name] this.backObj.regin_code = this.pkObj.value } }, handleCurrentChange1(val) { this.currentRow1 = val }, handleCurrentChange2(val) { this.currentRow2 = val }, toSure1() { if (this.currentRow1 === null) { this.$message.error('请选择设备!') return } this.pkObj = this.currentRow1 this.show = false crudProduceScreen.regionPoints(this.pkObj.value).then(res => { this.pointState = res }) }, toCall() { if (this.currentRow2 === null) { this.$message.error('请选择设备!') return } this.currentRow2.device_code = this.pointState[name] crudProduceScreen.callMater(this.currentRow2).then(res => { this.$message(res.msg) }) this.show = false }, toSure3() { if (!this.val1) { this.$message.error('请选择托盘类型!') return } // if (!this.val2) { // this.$message.error('请选择设备工序!') // return // } this.emptyObj.vehicle_type = this.val1 // this.emptyObj.regin_code = this.val2 crudProduceScreen.callEmp(this.emptyObj).then(res => { this.$message(res.msg) }) this.show = false }, toSure4() { if (this.sendObj.order_code === '') { this.$message.error('请输入订单编码!') return } if (this.sendObj.material_qty === '' || this.sendObj.material_qty === null) { this.$message.error('请输入合格数量!') return } // if (!this.val2) { // this.$message.error('请选择设备工序!') // return // } if (this.sendObj.vehicle_code === '') { this.$message.error('请输入载具编码!') return } // this.sendObj.regin_code = this.val2 this.sendObj.has_report = this.check1 this.sendObj.target_region_code = this.check2 crudProduceScreen.sendMater(this.sendObj).then(res => { this.$message(res.msg) }) this.show = false }, toSure5() { if (this.backObj.material_qty === '' || this.backObj.material_qty === null) { this.$message.error('请输入物料数量!') return } // if (!this.val2) { // this.$message.error('请选择设备工序!') // return // } // this.backObj.regin_code = this.val2 crudProduceScreen.sendVehicle(this.backObj).then(res => { this.$message(res.msg) }) this.show = false } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> .container { // width: 1280px; // height: 960px; width: 100%; height: 100%; padding: 1.5%; box-sizing: border-box; background: center / 100% 100% url('~@/assets/images/screen_bg.jpg') no-repeat; } .height-10 { height: 10%; } .height-20 { height: 20%; } .height-30 { height: 30%; } .height-100 { height: 100%; } .mg2 { margin: 0 2%; } .ver-justify { display: flex; flex-direction: column; justify-content: space-between; } .ver-center { display: flex; flex-direction: column; justify-content: center; } .s-btn-1 { display: flex; align-items: center; justify-content: center; height: 45%; font-size: 18px; line-height: 1; text-align: center; color: #fff; padding: 0 15px; background: center / 100% 100% url('~@/assets/images/screen_1.png') no-repeat; } .s-btn-1_dis { background-image: url('~@/assets/images/screen_5.png'); } .s-btn-2 { position: relative; height: 100%; background-color: #b3d8ff; border: 1px solid #53a8ff; border-radius: 16px; &::before { position: absolute; content: ''; left: 0; top: 20%; width: 100%; height: 80%; background-image: linear-gradient(to bottom, #66b1ff, #a0cfff); border-radius: 16px; } .p1 { position: absolute; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 22px; line-height: 22px; font-weight: 700; color: #fff; margin: 0; } .p2 { position: absolute; bottom: 22%; width: 100%; font-size: 16px; line-height: 16px; color: #fff; text-align: center; margin: 0; } } .s-btn-2_dis { background-color: #a2b1c1; border: 1px solid #393f44; &::before { background-image: linear-gradient(to bottom, #666e77, #a8b5c3); } } .s-btn-3 { height: 100%; } .btns-wrap { height: 40%; } .btns-wrap-2 { height: 35%; } .m-content { height: 54%; border: 1px solid #4aaee2; border-radius: 10px; padding: 10px; box-sizing: border-box; background-image: linear-gradient(to right, rgba(36, 128, 207, 0.5), rgba(15, 61, 101, 0.5)); box-shadow: inset 1px 1px 4px 2px rgb(74 174 226 / 40%), inset -1px -1px 4px 2px rgb(74 174 226 / 40%); p { font-size: 24px; line-height: 1; font-weight: 700; text-align: center; color: #3CC1FF; margin: 0; } } .m-content-2 { width: 60%; height: 65%; margin: 1% auto 0; } .m-content-inner { display: flex; flex-direction: column; justify-content: center; width: 100%; height: 100%; // background-color: #fff; border-radius: 10px; padding: 2% 1% } .grid { height: 90%; padding-top: 2%; } .pop-wraper { position: fixed; top: 50%; left: 5%; z-index: 20; width: 90%; height: 80%; border-radius: 15px; padding: 3%; background: center / 100% 100% url('~@/assets/images/screen_2.png') no-repeat; } .pop-wraper-1 { width: 50%; left: 25%; height: 60%; padding: 5% 3% 3% 3%; background: center / 100% 100% url('~@/assets/images/screen_4.png') no-repeat; } .popshow { transform: translateY(-50%); } .pophide { transform: translateY(100%); } .modal { position: fixed; bottom: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); z-index: 10; } .pop-h1 { font-size: 22px; line-height: 1; font-weight: 700; text-align: left; color: #F6F9FE; margin: 0; background: linear-gradient(180deg, rgba(255,255,255,1) 0%, rgba(49,190,255,0.9) 0%, rgba(239,252,254,1) 40%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .pop-btns { height: 8%; } .pop-grid { height: calc(92% - 24px); padding: 2% 0; } >>>.el-table { background-color: transparent; } >>>.el-table--border { border: none; } >>>.el-table .el-table__header-wrapper th { height: 40px; } >>>.el-table thead tr { background: center / 100% 100% url('~@/assets/images/screen_3.png') no-repeat; } >>>.el-table .el-table__header-wrapper th { background-color: transparent; color: #AFBED8; font-size: 16px; } >>>.el-table th.el-table__cell.is-leaf { border-bottom-color: #5D92FF; } >>>.el-table--border .el-table__cell { border-right: none; } >>>.el-table--mini .el-table__cell { padding: 8px 0; } >>>.el-table { color: #fff; font-size: 14px; tr { background-color: rgba(31,46,73,0.3); } } >>>.el-table td.el-table__cell { border-bottom-color: rgba(122,159,224,0.17); } >>>.el-table::before, .el-table--group::after, .el-table--border::after { background-color: rgba(122,159,224,0.17); } >>>.el-table__body tr.current-row>td.el-table__cell { background-color: #3F6ACA; } .filter-wraper { margin-bottom: 20px; } .p-label { font-size: 18px; line-height: 40px; text-align: right; color: #fff; margin: 0; } .p-value { width: 100%; font-size: 18px; line-height: 40px; height: 40px; text-align: left; color: #fff; margin: 0; padding: 0 30px 0 15px; background: rgba(45,88,184,0.25); border: 1px solid #21D0F2; } .select-wraper { font-size: 18px; line-height: 40px; height: 40px; text-align: left; color: #fff; >>>.el-select { width: 100%; } >>>.el-input__inner { background-color: rgba(45,88,184,0.25); border-color: #21D0F2; } >>>.el-input--mini .el-input__inner { font-size: 18px; line-height: 40px; height: 40px; color: #fff; } } .option-wraper { font-size: 18px; line-height: 40px; height: 40px; } >>>.el-checkbox__inner { width: 40px; height: 40px; line-height: 40px; font-size: 40px; } >>>.el-checkbox__inner::after { width: 6px; height: 20px; left: 15px; top: 3px; } >>>.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell { background-color: rgba(122,159,224,0.5) } </style>