Files
rd_mes_uniapp/pages/mes/jobCv/pieceReportOper/index.vue

356 lines
8.7 KiB
Vue
Raw Normal View History

2025-12-18 14:11:48 +08:00
<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>&emsp;&emsp;{{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>