Files
2025-12-18 14:11:48 +08:00

356 lines
8.7 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>