Files
rd_mes_uniapp/pages/wms/pdcIn/componentScn.vue

283 lines
8.0 KiB
Vue
Raw Normal View History

2025-12-18 14:11:48 +08:00
<template>
<view>
<uni-collapse style="width: 100%;">
<uni-forms ref="form" :modelValue="getCode" class="form">
<uni-easyinput type="text" prefixIcon="scan"
class="Number"
placeholder="请扫描销售工业条码!"
placeholderStyle="color:black"
v-model="getCode.Industry"
@iconClick="iconClick('industry')"
@confirm="getIndustry"
:focus="focusFoIndustry"
clearable
/>
<uni-collapse-item :disabled="open" :open="!open" class="uniCollapse">
<form class="form" >
<uni-table border stripe emptyText="暂无更多数据" >
<!-- 表格数据行 -->
<uni-tr>
<uni-td align="center" width="30">物料编码</uni-td>
<uni-td align="center" width="70">{{form.materialCode}}</uni-td>
</uni-tr>
<uni-tr>
<uni-td align="center" width="30">工业条码</uni-td>
<uni-td align="center" width="70">{{form.Industry}}</uni-td>
</uni-tr>
<uni-tr>
<uni-td align="center" width="30">物料名称</uni-td>
<uni-td align="center" width="70">{{form.materialName}}</uni-td>
</uni-tr>
<uni-tr>
<uni-td align="center" width="30">规格</uni-td>
<uni-td align="center" width="70">{{form.specification1}}</uni-td>
</uni-tr>
</uni-table>
<br />
<uni-easyinput type="text" prefixIcon="scan"
class="Number"
placeholder="请扫描组件二维码!"
placeholderStyle="color:black"
v-model="getCode.computed"
@iconClick="iconClick('subassembly')"
@confirm="getSubassembly"
:focus="focusComputed"
clearable
/>
<uni-table border stripe emptyText="暂无更多数据" >
<!-- 表头行 -->
<uni-tr>
<uni-th align="center" width="70">编码</uni-th>
<uni-th align="center" width="30">操作</uni-th>
</uni-tr>
<!-- 表格数据行 -->
<uni-tr v-for="(item,index) in form.list" :key="index">
<uni-td align="center">{{item.componentCode}}</uni-td>
<uni-td align="center">
<u-button @click="deleteList(item)">删除</u-button>
</uni-td>
</uni-tr>
</uni-table>
</form>
</uni-collapse-item>
</uni-forms>
</uni-collapse>
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog cancelText="关闭" confirmText="同意" title="通知" :content="'是否删除编码为'+item.componentCode+'的单子'" @confirm="dialogConfirm"
@close="dialogClose"></uni-popup-dialog>
</uni-popup>
<!-- 提示信息弹窗 -->
<uni-popup ref="message" type="message">
<uni-popup-message :type="msgType" :message="messageText" :duration="2000"></uni-popup-message>
</uni-popup>
</view>
</template>
<script>
import {
getMaterial,
} from "@/api/mes/material.js";
import {
getSubassembly,
insertSubassembly,
deletSubassembly
} from "@/api/mes/wmsPieceOutRecord.js"
export default {
data() {
return {
//工业条码自动聚焦
focusFoIndustry:true,
focusComputed:false,
//解析的码数据
getCode:{
//工业条码
Industry:null,
//组件
computed:null,
},
//控制明细区是否展开
open:true,
//获取到的数据
form:{
list:[{
name:1,
id:3
},{
name:2,
id:4
}]
},
//要删除的信息
item:{},
//提示信息
messageText:null,
msgType:'info'
}
},
methods: {
/**
* 扫码方法
* @param {Object} value {industry || number }
*/
iconClick(value){
const _this = this;
uni.scanCode({
// 是否只能从相机扫码,不允许从相册选择图片
onlyFromCamera:true,
// 扫码类型
scanType: ['barCode', 'qrCode'],
success: function(res) {
value === 'industry' ? _this.getIndustry(res.result) : value;
value === 'subassembly' ? _this.getSubassembly(res.result) : value;
}
})
},
/**
* 扫描工业条码
* @param {Object} pieceBarcode 解析到的条码数据
*/
async getIndustry(pieceBarcode){
const _self = this;
//判断工业条码里面是否有,号,逗号后面是九位数
_self.focusComputed = false;
if(pieceBarcode ==undefined || pieceBarcode == null|| pieceBarcode.length < 11) return
if(pieceBarcode.indexOf(',') === -1 ||pieceBarcode.split(',').length !=2 ||pieceBarcode.split(',')[1].length != 9){
this.updateMessage('error','该工业条码不符合规范')
return
}
try{
//获取物料信息
const {materialCode,materialName,specification1} = await fnGetMaterial(pieceBarcode);
//获取组件信息
const list = await this.getSubassemblyList(pieceBarcode)
//把所有信息存入form中
_self.form = Object.assign({},{materialCode,materialName,specification1,list,Industry:pieceBarcode})
_self.open = false
_self.focusComputed = true;
}catch(e){
//TODO handle the exception
_self.updateMessage('error','未查到相关数据')
_self.form = Object.assign({})
}
/**
* 通过id获取物料信息
* @param {Object} pieceBarcode 扫描的工业条码
*/
async function fnGetMaterial(pieceBarcode){
//从pieceBarcode截取逗号前面的数据用作id
const id = parseInt(pieceBarcode.split(',')[0]);
let data = [];
await getMaterial(id).then(function(res){
data = res.data
})
return data;
}
},
/**
* 扫描组件条码
* @param {Object} code
*/
async getSubassembly(componentCode){
const _self = this;
// _self.focusComputed = false;
//判断条码是否符合规范
if(componentCode === null || componentCode ==='' ||componentCode === undefined) return _self.focusComputed = true
//查询组件表是否有这个组件,没有则添加,有则结束
if(!await fnInsertSubassembly(this.form.Industry,componentCode)) {
_self.focusComputed = true
return _self.updateMessage('warn','该组件已被扫描')
}
//重新查询数据
const list = await _self.getSubassemblyList(_self.form.Industry)
//把所有信息存入form中
_self.form = Object.assign({},_self.form,{list});
_self.getCode.computed = null;
_self.focusComputed = true
/**
* 查询组件表是否有这个组件没有则添加
* @param {Object} Industry
* @param {Object} componentCode
*/
async function fnInsertSubassembly(Industry,componentCode){
let data = false;
await insertSubassembly(Industry,componentCode).then(res=>{
data = true
})
return data
}
},
/**
* 通过工业条码查询组件信息
* @param {Object} pieceBarcode
*/
async getSubassemblyList(pieceBarcode){
let data = [];
await getSubassembly(pieceBarcode).then(res => {
data = res.data
})
return data
},
/**
* 删除明细
* @param {Object} 要删除明细的数据
*/
deleteList(item){
this.item = item
this.$refs.alertDialog.open()
},
/**
* 弹出框确认按钮
*/
async dialogConfirm(){
const _self = this;
await deletSubassembly(this.item.id).then(async res => {
this.$refs.alertDialog.close()
this.updateMessage('success','删除成功')
//重新查询数据
const list = await this.getSubassemblyList(_self.form.Industry)
//把所有信息存入form中
_self.form = Object.assign({},_self.form,{list})
})
},
/**
* 弹出框取消按钮
*/
dialogClose(){
this.updateMessage('info','取消删除')
},
/**
* @param {Object} type {'info'消息'success''成功‘,'error':'失败','warn':'警告'}
* @param {Object} text
*/
updateMessage(type,text){
this.messageText = text
this.msgType = type
this.$refs.message.open()
}
}
}
</script>
<style>
page{
padding-top: 10px;
background-color: #ffffff ;
}
</style>
<style scoped lang="scss">
.form {
width: 90%;
margin: 0 auto;
color: black;
font-size:40rpx;
}
.form text {
margin-left: 20%;
}
</style>