356 lines
8.7 KiB
Vue
356 lines
8.7 KiB
Vue
<template>
|
||
<view>
|
||
<div class="head">
|
||
<table>
|
||
<tr>
|
||
<td colspan='2'>
|
||
<uni-easyinput type="text" prefixIcon="scan"
|
||
placeholder="请扫描作业!"
|
||
v-model="machineCode"
|
||
@iconClick="iconClick('machineCode')"
|
||
@change="changeInput('machineCode',$event)"
|
||
/>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>作业编码:{{form.pwoJobCode}}</td>
|
||
</tr>
|
||
<tr>
|
||
<td>制  程:{{form.opTitle}}</td>
|
||
</tr>
|
||
<tr>
|
||
<td>物料编码:{{form.pwoCode}}</td>
|
||
</tr>
|
||
<tr>
|
||
<td>物料名称:{{form.ptTitleTar}}</td>
|
||
</tr>
|
||
</table>
|
||
<div @click="clickButton('qualified')" :class="{bgColor:bgColor === 'qualified'}">合格</div>
|
||
<div @click="clickButton('bad')" :class="{bgColor:bgColor === 'bad'}">不良</div>
|
||
<div @click="clickButton('scrap')" :class="{bgColor:bgColor === 'scrap'}">报废</div>
|
||
<view class="uni-px-5 uni-pb-5" v-show="bgColor === 'bad'">
|
||
<uni-data-checkbox mode="button" v-model="form.reason" :localdata="reason.bad"></uni-data-checkbox>
|
||
</view>
|
||
<view class="uni-px-5 uni-pb-5" v-show="bgColor === 'scrap'">
|
||
<uni-data-checkbox mode="button" v-model="form.reason" :localdata="reason.scrap"></uni-data-checkbox>
|
||
</view>
|
||
</div>
|
||
<div class="body">
|
||
<uni-easyinput type="text" prefixIcon="scan"
|
||
placeholder="请扫描件号!"
|
||
v-model="pieceNo"
|
||
@iconClick="iconClick('pieceNo')"
|
||
@change="changeInput('pieceNo',$event)"
|
||
/>
|
||
<uni-table ref="table" border stripe>
|
||
<uni-tr>
|
||
<uni-th align="center">序号</uni-th>
|
||
<uni-th style="width: 80%"align="center">件号</uni-th>
|
||
</uni-tr>
|
||
<uni-tr v-for="(item, index) in pieceNoList" :key="index">
|
||
<uni-td align="center">{{ index+1 }}</uni-td>
|
||
<uni-td align="center"> {{item}} </uni-td>
|
||
</uni-tr>
|
||
</uni-table>
|
||
</div>
|
||
|
||
|
||
<uni-popup ref="message" type="message">
|
||
<uni-popup-message :type="message.msgType" :message="message.messageText" :duration="2000"></uni-popup-message>
|
||
</uni-popup>
|
||
<uni-popup ref="popup" type="center" background-color="#fff" :is-mask-click="false">
|
||
<!-- 加载动画 -->
|
||
<loding-vue/>
|
||
</uni-popup>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
listPwoJob
|
||
} from '@/api/mes/jobReport.js'
|
||
import {
|
||
getDicts
|
||
} from '@/api/system/dict/dictData.js'
|
||
import {
|
||
addReport,listEquipment
|
||
} from '@/api/mes/jobReport.js'
|
||
//引入加载动画
|
||
import lodingVue from "@/utils/loding/loding.vue";
|
||
export default {
|
||
components:{
|
||
lodingVue
|
||
},
|
||
//页面加载生命周期
|
||
onLoad: async function (option) { //option为object类型,会序列化上个页面传递的参数
|
||
const _self = this;
|
||
if(option.status) _self.state = true
|
||
},
|
||
data() {
|
||
return {
|
||
machineCode: null , //扫描作业
|
||
isPieceIn: true, //判断哪个路由进来
|
||
form:{
|
||
}, //头部展示数据
|
||
message:{
|
||
msgType:'warn',
|
||
messageText:'请先查询设备信息'
|
||
},
|
||
bgColor: null,//决定按钮颜色
|
||
reason:{},//不良以及报废原因
|
||
pieceNo:null,//件号
|
||
pieceNoList:new Set(), //table展示数据
|
||
listEquipment:[],//设备信息
|
||
}
|
||
},
|
||
/**
|
||
* vue生命周期
|
||
* 当组件挂载后触发
|
||
*/
|
||
async mounted() {
|
||
const _self = this;
|
||
const data = await Promise.all([
|
||
//获取不良品原因
|
||
_self.getApi('getDicts','mes_job_report_defect'),
|
||
//报废品
|
||
_self.getApi('getDicts','mes_job_report_scrap'),
|
||
_self.getApi('listEquipment')
|
||
])
|
||
const [bad,scrap,listEquipment] = data
|
||
bad.forEach(item=>{
|
||
item.text = item.dictLabel,
|
||
item.value = item.dictValue
|
||
});
|
||
scrap.forEach(item=>{
|
||
item.text = item.dictLabel,
|
||
item.value = item.dictValue
|
||
})
|
||
_self.listEquipment = listEquipment
|
||
_self.reason = Object.assign({},{bad,scrap})
|
||
},
|
||
methods: {
|
||
/**
|
||
* 扫码方法
|
||
* @param {string} value {'equipment' || }
|
||
*/
|
||
iconClick(value){
|
||
const _this = this;
|
||
uni.scanCode({
|
||
// 是否只能从相机扫码,不允许从相册选择图片
|
||
onlyFromCamera:true,
|
||
// 扫码类型
|
||
scanType: ['barCode', 'qrCode'],
|
||
success: function(res) {
|
||
const obj = {
|
||
machineCode:getMachineCode,
|
||
pieceNo:getPieceNo,
|
||
}
|
||
_self.obj(value)(res.result)
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* input框change事件
|
||
* @param {string} key
|
||
* @param {Object} value
|
||
*/
|
||
changeInput(key,value){
|
||
if(value === null || value === '') return
|
||
const _self = this;
|
||
const obj = {
|
||
machineCode : 'getMachineCode',
|
||
pieceNo: 'getPieceNo',
|
||
}
|
||
_self[obj[key]](value)
|
||
},
|
||
/**
|
||
* 扫描作业方法
|
||
* @param {Object} value
|
||
*/
|
||
async getMachineCode(value){
|
||
if(value === null) return
|
||
const _self = this;
|
||
//清空数据
|
||
_self.bgColo =null;
|
||
_self.pieceNoList = new Set();
|
||
|
||
const rows = await _self.getApi('listPwoJob',{code:value})
|
||
if(rows.length != 0){
|
||
const {code : pwoJobCode,opTitle,pwoCode,ptTitleTar,ptNoTar,opCode,batchNo,eqpId} = rows[0]
|
||
_self.form = Object.assign({},{
|
||
pwoJobCode,opTitle,pwoCode,ptTitleTar,ptNoTar,opCode,batchNo,
|
||
isPieceIn:_self.state
|
||
})
|
||
//获取设备信息,并选择该作业的设备
|
||
const listEquipment = _self.listEquipment
|
||
for(let i in listEquipment){
|
||
if(listEquipment[i].id === eqpId)return _self.form.machineId = listEquipment[i].equipmentCode
|
||
}
|
||
}
|
||
},
|
||
/**
|
||
* 扫描件号方法
|
||
* @param {Object} value
|
||
*/
|
||
async getPieceNo(value){
|
||
const _self = this;
|
||
_self.pieceNo = null
|
||
if(_self.form.reason === null && _self.form.type != '合格品'){
|
||
_self.messageType({
|
||
msgType:'warn',
|
||
messageText:'请选择一个问题'
|
||
})
|
||
return
|
||
}
|
||
const pieceNoList = _self.pieceNoList
|
||
if(pieceNoList.has(value)){
|
||
_self.messageType({
|
||
msgType:'error',
|
||
messageText:'该件号已被扫描'
|
||
})
|
||
return
|
||
}
|
||
_self.submit(value).then(res=>{
|
||
if(res != undefined) return pieceNoList.add(value)
|
||
}).finally(()=>{
|
||
})
|
||
},
|
||
/**
|
||
* 按钮点击方法
|
||
* @param {Object} key
|
||
* @param {Object} evnet
|
||
*/
|
||
clickButton(key){
|
||
const _self = this;
|
||
_self.clickState(key)
|
||
},
|
||
/**
|
||
* 产品状态按钮点击事件
|
||
* @param {Object} key
|
||
*/
|
||
clickState(key){
|
||
const _self = this;
|
||
_self.bgColor = key
|
||
const obj = {
|
||
qualified:'合格品',
|
||
bad:'不良品',
|
||
scrap:'报废'
|
||
}
|
||
_self.form.reason = null
|
||
_self.form.type = obj[key]
|
||
},
|
||
/**
|
||
* 件号扫描后提交事件
|
||
* @param {Object} value 当前扫描的值
|
||
*/
|
||
async submit(pieceNo){
|
||
const _self = this;
|
||
// 获取当前北京时间的时间戳(单位为毫秒)
|
||
var stamp= new Date().getTime() + 8 * 60 * 60 * 1000;
|
||
var endTime = new Date(stamp).toISOString().replace(/T/, ' ').replace(/\..+/, '').substring(0, 19);
|
||
//获取账户名
|
||
const createByName = uni.getStorageSync('HBusername');
|
||
const reportNumber = 1;
|
||
const way = "人工报工";
|
||
const form = Object.assign(_self.form,{
|
||
endTime,createByName,reportNumber,way,pieceNo
|
||
})
|
||
return await _self.getApi('addReport',form)
|
||
},
|
||
/**
|
||
* 接口调用管理方法
|
||
* 所有向后端发送的请求全部从这里调用
|
||
* @param {Object} api api接口
|
||
* @param {Object} value 带入的参数
|
||
*/
|
||
async getApi(api,value){
|
||
const _self = this;
|
||
const objApi = {
|
||
listPwoJob,
|
||
getDicts,
|
||
addReport,
|
||
listEquipment
|
||
}
|
||
try{
|
||
//打开蒙层
|
||
_self.$refs.popup.open()
|
||
//查询接口
|
||
const data = await objApi[api](value)
|
||
if(api === 'addReport'){
|
||
return data
|
||
}
|
||
return data.rows ? data.rows : data.data
|
||
}catch(e){
|
||
_self.messageType({
|
||
msgType:'error',
|
||
messageText:'接口请求出错'
|
||
})
|
||
}finally{
|
||
//关闭蒙层
|
||
_self.$refs.popup.close()
|
||
}
|
||
},
|
||
/**
|
||
* 提示信息
|
||
* @param {Object} obj
|
||
*/
|
||
messageType(obj){
|
||
const _self = this;
|
||
let message ={}
|
||
if(obj === undefined){
|
||
message = {
|
||
msgType:'error',
|
||
messageText:'请填写设备代码'
|
||
}
|
||
}else{
|
||
message = {
|
||
msgType:obj.msgType,
|
||
messageText:obj.messageText
|
||
}
|
||
}
|
||
_self.message = Object.assign({},message)
|
||
return _self.$refs.message.open()
|
||
},
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
page {
|
||
background-color: #ffffff;
|
||
color: #585858;
|
||
font-size: 4vw;
|
||
}
|
||
view {
|
||
width: 95vw;
|
||
margin: 0 auto;
|
||
}
|
||
.head {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex-wrap: wrap;
|
||
table{
|
||
width: 100%;
|
||
}
|
||
&>div{
|
||
border: 1vw solid #21cfff;
|
||
border-radius: 20%;
|
||
width: 20vw;
|
||
text-align:center;
|
||
line-height: 8vw;
|
||
}
|
||
}
|
||
.body{
|
||
margin-top: 1vw;
|
||
&>* {
|
||
margin-top: 2vw;
|
||
}
|
||
.td{
|
||
text-align:center;
|
||
}
|
||
}
|
||
.bgColor {
|
||
background-color: #c4ffd0;
|
||
}
|
||
</style>
|