You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
7.5 KiB
310 lines
7.5 KiB
<!--扫描组件-->
|
|
<template>
|
|
<!-- <page-meta root-font-size="18px"></page-meta> -->
|
|
<view>
|
|
<view class="pop_tab">
|
|
<view class="tab_info">
|
|
<view class="conbox">
|
|
<textarea inputmode="none" v-model="scanMsg" trim="all" maxlength="1000"
|
|
style="margin-left: 5px;width: 90%;" :focus="boxfocus" :placeholder="placeholderValue"
|
|
@focus="getfocus" @blur="losefocus" @input="handelScanMsg" :cursor="cursorIndex"></textarea>
|
|
</view>
|
|
<view class="uni-flex uni-row space-between u-col-center">
|
|
<view class="uni-flex">
|
|
<button class="clean_scan_btn" @click="clearScanValue()">清空</button>
|
|
<button class="scan_btn" @click="clickScanMsg()">扫描</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view style="width: 100%;">
|
|
<view style="width: 100%;" v-if="scanList.length>0&&isShowHistory">
|
|
<view class="uni-flex uni-row space-between u-col-center">
|
|
<view class="" style="padding: 10rpx;">
|
|
历史记录
|
|
</view>
|
|
<view class="" style="padding-right: 10rpx;">
|
|
<u-icon :name="expendIcon" size="35rpx" @click="expands()"></u-icon>
|
|
</view>
|
|
</view>
|
|
<u-line class='line_color' style='padding-top: 10rpx;padding-bottom: 20rpx;'></u-line>
|
|
<scroll-view scroll-y="true" class="scroll-view" v-if="expand&&scanList.length>0"
|
|
style="height: 70px;">
|
|
<view class="uni-flex u-col" v-for="(item,index) in scanList" :key="index">
|
|
<view style="width: 100%;max-height: 100px;">
|
|
<view class="uni-flex u-row space-between u-col-center" @click="showItem(item)">
|
|
<view class="text_ellipsis" style="padding: 15rpx;">
|
|
{{item}}
|
|
</view>
|
|
<view class="">
|
|
<u-icon name="arrow-right"></u-icon>
|
|
</view>
|
|
</view>
|
|
<u-line class='line_color'></u-line>
|
|
</view>
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<comMessage ref="comMessage"></comMessage>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import {
|
|
getLabelInfo
|
|
} from '../../common/label.js';
|
|
|
|
import {
|
|
getMesPackInfo
|
|
} from '@/api/request2.js';
|
|
import {
|
|
Exception
|
|
} from 'sass';
|
|
|
|
export default {
|
|
name: "winComScan",
|
|
emits: ["getResult"],
|
|
components: {},
|
|
props: {
|
|
placeholder: {
|
|
type: String,
|
|
default: '请扫描标签'
|
|
},
|
|
clearResult: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
boxFocus: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
isShowHistory: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
headerType: {
|
|
type: String,
|
|
default: 'HPQ' //HLB HMQ HCQ HPQ
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
// scanMsg: "HPQ;V1.0;ICE115F11161AG;PP20230427000027;B20230427002;Q100",
|
|
scanMsg: "",
|
|
boxfocus: false,
|
|
placeholderValue: '',
|
|
scanResult: {},
|
|
scanList: [],
|
|
expand: true,
|
|
expendIcon: 'arrow-down',
|
|
cursorIndex: 0,
|
|
itemCode: ""
|
|
}
|
|
},
|
|
mounted() {
|
|
this.boxfocus = true;
|
|
// uni.hideKeyboard();
|
|
|
|
// #ifdef H5
|
|
if (document.querySelector('textarea') != null) {
|
|
document.querySelector('textarea').setAttribute('inputmode', 'none')
|
|
}
|
|
// #endif
|
|
// this.hide()
|
|
// #ifdef APP-PLUS
|
|
|
|
// #endif
|
|
},
|
|
watch: {
|
|
placeholder() {
|
|
this.placeholderValue = '请扫描' + this.placeholder;
|
|
}
|
|
},
|
|
created() {
|
|
this.placeholderValue = '请扫描' + this.placeholder;
|
|
},
|
|
methods: {
|
|
|
|
hide() {
|
|
// #ifdef APP-PLUS
|
|
// 只是解决软键盘的闪现
|
|
var interval = setInterval(function() {
|
|
uni.hideKeyboard(); //隐藏软键盘
|
|
console.log('刷新')
|
|
}, 5);
|
|
setTimeout(() => {
|
|
clearInterval(interval);
|
|
console.log('停止刷新')
|
|
}, 1000);
|
|
// #endif
|
|
},
|
|
setItemCodeSimulate(itemCode,scanMsg) {
|
|
this.itemCode = itemCode;
|
|
this.scanMsg = scanMsg;
|
|
},
|
|
setItemCode(itemCode) {
|
|
this.itemCode = itemCode;
|
|
},
|
|
|
|
getValue() {
|
|
return this.scanMsg
|
|
},
|
|
setValue(val) {
|
|
this.scanMsg = val
|
|
},
|
|
clearScanValue() {
|
|
this.scanMsg = ''
|
|
this.getfocus();
|
|
},
|
|
clickScanMsg() {
|
|
this.scanMsg = this.scanMsg + "\n";
|
|
this.handelScanMsg();
|
|
},
|
|
handelScanMsg() {
|
|
let that = this;
|
|
let index = that.scanMsg.indexOf('\n');
|
|
if (index >= 0) {
|
|
setTimeout(() => {
|
|
that.losefocus();
|
|
// let content = uni.$u.trim(that.scanMsg)
|
|
let content = uni.$u.trim(that.scanMsg)
|
|
// let content = that.scanMsg;
|
|
if (content == "") {
|
|
that.getfocus();
|
|
this.$refs.comMessage.showErrorMessage("扫描内容为空,请重新扫描", res => {
|
|
if (res) {
|
|
that.scanMsg = ""
|
|
that.getfocus();
|
|
}
|
|
})
|
|
return;
|
|
}
|
|
|
|
if (that.isShowHistory) {
|
|
that.scanList.unshift(content);
|
|
}
|
|
console.log("扫描长度", content.length)
|
|
getMesPackInfo(this.itemCode).then(res => {
|
|
try {
|
|
if (res.data.list.length == 0) {
|
|
throw new Error("没有查找到物料号【"+this.itemCode+"】对应的mes物料号")
|
|
}
|
|
var result = res.data.list[0]
|
|
var partNumber = result.partNumber;
|
|
var lengthMat = result.lengthMat;
|
|
var lengthBc = result.lengthBc;
|
|
|
|
|
|
let itemCode = content.substr(0, lengthMat);
|
|
let productDate = content.substr(lengthMat, 8);
|
|
let batch = content.substr(lengthMat + 8, 3);
|
|
let order = content.substr(-8);
|
|
if (itemCode != partNumber) {
|
|
that.clear();
|
|
throw new Error("解析错误:扫描物料号【" + itemCode + "】与查询物料号【" + partNumber +
|
|
"】不一致")
|
|
|
|
}
|
|
|
|
let scanResult = {
|
|
itemCode: itemCode,
|
|
productDate: productDate,
|
|
batch: batch,
|
|
order: order,
|
|
qty: 1,
|
|
content: content,
|
|
success: true,
|
|
};
|
|
that.clear();
|
|
that.$emit("getResult", scanResult);
|
|
} catch (error) {
|
|
this.$refs.comMessage.showErrorMessage( error.message, res => {
|
|
if (res) {
|
|
that.getfocus();
|
|
}
|
|
})
|
|
}
|
|
|
|
}).catch(error => {
|
|
this.$refs.comMessage.showErrorMessage(error, res => {
|
|
if (res) {
|
|
that.scanMsg = ""
|
|
that.getfocus();
|
|
}
|
|
})
|
|
})
|
|
|
|
}, 500);
|
|
}
|
|
|
|
},
|
|
getfocus() {
|
|
let that = this;
|
|
this.$nextTick(r => {
|
|
that.boxfocus = true;
|
|
});
|
|
// this.hide()
|
|
},
|
|
losefocus() {
|
|
let that = this;
|
|
this.$nextTick(r => {
|
|
that.boxfocus = false;
|
|
});
|
|
},
|
|
clear() {
|
|
this.cursorIndex = 0;
|
|
this.scanMsg = ''
|
|
},
|
|
iconClick(type) {
|
|
this.$emit("clearResult", this.scanMsg);
|
|
},
|
|
expands() {
|
|
this.expand = !this.expand;
|
|
this.expendIcon = this.expand == true ? "arrow-down" : "arrow-up"
|
|
},
|
|
scanClick() {
|
|
this.handelScanMsg();
|
|
},
|
|
cancelClick() {
|
|
this.clear();
|
|
this.getfocus();
|
|
},
|
|
showItem(item) {
|
|
this.$refs.comMessage.showMessage(item, res => {
|
|
if (res) {
|
|
// this.$refs.modal.cancelClose();
|
|
}
|
|
})
|
|
},
|
|
|
|
scanQRCode() {
|
|
let that = this;
|
|
uni.scanCode({
|
|
onlyFromCamera: true,
|
|
success: (res) => {
|
|
that.scanMsg = res.result;
|
|
that.$emit("getResult", res.result);
|
|
console.log('扫描二维码成功,结果:' + res.result);
|
|
},
|
|
fail: (res) => {
|
|
that.showItem('扫描出现错误:' + res.result);
|
|
console.log('扫描出现错误:' + res.result);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<script module="textarea" lang="renderjs">
|
|
export default {
|
|
mounted() {
|
|
document.querySelector('textarea').setAttribute('inputmode', 'none')
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
|
|
</style>
|