注意:打包前一定一定要在mainfest.json中进行Nfc授权,否则打包出来的安装包无法正常读取标签
mainfest.json授权:
"<uses-permission android:name="android.permission.INTERNET"/>",
"<uses-permission android:name="android.permission.NFC"/>",
"<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>",
<template>
<view class="container_wrap setting_container">
<u-form ref="uForm" :model="form" class="setting_form">
<u-form-item label="RFID" prop="rfid">
<u-input v-model="form.rfid" placeholder="请输入RFID" input-align="right"/>
</u-form-item>
<u-form-item label="电机序列号" prop="motorSN" labelWidth="178" >
<u-input v-model="form.motorSN" placeholder="请输入电机序列号" input-align="right"/>
</u-form-item>
<u-form-item label="货位" prop="position" >
<u-input v-model="form.position" placeholder="请选择货位" type="select" @click="positionShow=true" input-align="right"/>
</u-form-item>
</u-form>
<u-button class="primary_button" @click="submit" shape='circle'>入库</u-button>
<u-modal v-model="confirmShow" show-cancel-button @confirm="confirmSubmit" cancel="confirmShow = false" title="请确认信息无误">
<view class="slot-content form-modal-cont">
<view>货位:{{form.position}}</view>
<view>RFID:{{confirmInfo.Rfid}}</view>
<view>电机序列号:{{confirmInfo.MotorSN}}</view>
<view>电机型号:{{confirmInfo.MotorType}}</view>
<view>电机修程:{{confirmInfo.MotorRepair}}</view>
<view>轴承厂家:{{confirmInfo.Factory}}</view>
<view>修俊时间:{{confirmInfo.RepairDate}}</view>
<!-- <view style="color:red;text-align: center;margin-top: 10rpx;">请确认信息无误!</view> -->
</view>
</u-modal>
<u-select :default-value="defaultValue" value-name="Id" label-name="Name" :mode="mode" v-model="positionShow" :list="positionList" @confirm="confirmPicker" @cancel="cancelPicker"></u-select>
<tabBar current="/pages/work/goodsIn"></tabBar>
</view>
</template>
<script>
var NfcAdapter;
import request from '@/utils/tools/request.js'
import { loadposition, goodssearch, goodsin } from '@/api/embiid/pda.js'
export default {
data() {
return {
show: false,
result: '尚未选择',
defaultValue: [0],
mode: 'single-column',
form:{
rfid:'',
motorSN:'',
position:''
},
positionObj:{},
positionShow:false,
positionList:[],
rules: {
position: [
{
required: true,
message: '请选择货位',
trigger: ['change','blur'],
}
]
},
// scancode:'',
confirmInfo:{},
confirmShow:false,
confirmCon:''
}
},
onShow() {
this.NFCInit();
},
onLoad: function () {
try {
this.getPositionFn()
} catch (e) {
uni.showToast({
icon:'fail',
title:'异常,原因:'+e.message
});
}
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
onHide() {
this.NFCReadUID();
},
methods:{
getPositionFn(){
loadposition({regionId:'IN'}).then(res => {
let { Data } = res
this.positionList = Data||[]
}).catch((err) => {
if(err.Message){
uni.showModal({
title: 'error',
content: err.Message,
showCancel:false
});
}
})
},
confirmPicker(obj){
this.positionObj = obj[0]
this.form.position = obj[0].label;
},
cancelPicker(){
},
submit() {
this.$refs.uForm.validate(valid => {
if (valid) {
this.goodssearchFn()
} else {
console.log('验证失败');
}
});
},
goodssearchFn(){
let params = {
rfid: this.form.rfid,
motorSN: this.form.motorSN
}
goodssearch(params).then(res => {
const {Data} = res
this.confirmInfo = Data
this.confirmShow = true
}).catch((err) => {
if(err.Message){
uni.showModal({
title: 'error',
content: err.Message,
showCancel:false
});
}
})
},
confirmSubmit(){
let params = {
"rfid": this.confirmInfo.Rfid, //RFID 值
"motorSN": this.confirmInfo.MotorSN, //电机序列号
"motorType": this.confirmInfo.MotorType, //电机型号
"motorRepair": this.confirmInfo.MotorRepair, //电机修程
"factory": this.confirmInfo.Factory, //轴承厂家
"repairDate": this.confirmInfo.RepairDate, //修俊时间
"productId": 2, //产品Id ,默认2
"positionName": this.form.position //位置编号
}
goodsin(params).then(res => {
uni.showToast({
icon: "none",
title: '操作成功'
});
}).catch((err) => {
if(err.Message){
uni.showModal({
title: 'error',
content: err.Message,
showCancel:false
});
}
})
},
NFCInit() {
try {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Activity = plus.android.importClass('android.app.Activity');
var PendingIntent = plus.android.importClass('android.app.PendingIntent');
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
var _nfcAdapter = NfcAdapter.getDefaultAdapter(main)
var ndef = new IntentFilter("android.nfc.action.NDEF_DISCOVERED"); //NfcAdapter.ACTION_NDEF_DISCOVERED
var tag = new IntentFilter("android.nfc.action.TAG_DISCOVERED"); //NfcAdapter.ACTION_TECH_DISCOVERED
var tech = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
var intentFiltersArray = [ndef, tag, tech];
var techListsArray = [
["android.nfc.tech.Ndef"],
["android.nfc.tech.IsoDep"],
["android.nfc.tech.NfcA"],
["android.nfc.tech.NfcB"],
["android.nfc.tech.NfcF"],
["android.nfc.tech.Nfcf"],
["android.nfc.tech.NfcV"],
["android.nfc.tech.NdefFormatable"],
["android.nfc.tech.MifareClassi"],
["android.nfc.tech.MifareUltralight"]
];
var _intent = new Intent(main, main.getClass());
_intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
var pendingIntent = PendingIntent.getActivity(main, 0, _intent, 0);
if (_nfcAdapter == null) {
this.tip = '本设备不支持NFC!';
} else if (_nfcAdapter.isEnabled() == false) {
this.tip = 'NFC功能未打开!';
} else {
this.tip = 'NFC正常';
_nfcAdapter.enableForegroundDispatch(main, pendingIntent, IntentFilter, techListsArray);
}
} catch (e) {
//TODO handle the exception
}
},
NFCReadUID() {
var main = plus.android.runtimeMainActivity();
var _intent = main.getIntent();
var _action = _intent.getAction();
if (NfcAdapter.ACTION_NDEF_DISCOVERED == _action || NfcAdapter.ACTION_TAG_DISCOVERED == _action || NfcAdapter.ACTION_TECH_DISCOVERED ==
_action) {
var Tag = plus.android.importClass('android.nfc.Tag');
var tagFromIntent = _intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
var uid = _intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
let str = this.Bytes2HexString(uid);
this.form.rfid = str.toUpperCase()
}
},
//将byte[] 转为Hex,
Bytes2HexString(arrBytes) {
var str = "";
for (var i = 0; i < arrBytes.length; i++) {
var tmp;
var num = arrBytes[i];
if (num < 0) {
//Java中数值是以补码的形式存在的,应用程序展示的十进制是补码对应真值。补码的存在主要为了简化计算机底层的运算,将减法运算直接当加法来做
tmp = (255 + num + 1).toString(16);
} else {
tmp = num.toString(16);
}
if (tmp.length == 1) {
tmp = "0" + tmp;
}
str += tmp;
}
return str;
}
}
}
</script>
<style lang="scss" scoped>
.setting_container {
padding: 20rpx 30rpx;
box-sizing: border-box;
background-color: #f8f8f8;
height: 100%;
.setting_form{
background-color: #fff;
padding: 0 30rpx;
border-radius: 6px;
/deep/ .u-form-item{
color: #606266;
}
}
}
.form-modal-cont{
padding: 24rpx 40rpx;
uni-view{
height: 64rpx;
line-height: 64rpx;
}
}
</style>