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.
198 lines
4.5 KiB
198 lines
4.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" style="padding: 10px; color: #3c9cff; font-weight: bold; font-size: 15px">
|
|
{{ customerItemCode }}
|
|
</view>
|
|
<view class="uni-flex">
|
|
<button class="clean_scan_btn" @click="clearScanValue()">清空</button>
|
|
<button class="scan_btn" @click="clickScanMsg()">扫描</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<com-message ref="comMessageRef" />
|
|
</view>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import { ref, getCurrentInstance, onMounted, nextTick, watch } from 'vue'
|
|
|
|
const props = defineProps({
|
|
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
|
|
}
|
|
})
|
|
const scanMsg = ref('')
|
|
const boxfocus = ref(false)
|
|
const placeholderValue = ref('')
|
|
const scanResult = ref({})
|
|
const scanList = ref([])
|
|
const expand = ref(true)
|
|
const expendIcon = ref('arrow-down')
|
|
const cursorIndex = ref(0)
|
|
const customerItemCode = ref('')
|
|
const comMessageRef = ref()
|
|
onMounted(() => {
|
|
boxfocus.value = true
|
|
uni.hideKeyboard()
|
|
|
|
// #ifdef H5
|
|
if (document.querySelector('textarea') != null) {
|
|
document.querySelector('textarea').setAttribute('inputmode', 'none')
|
|
}
|
|
// #endif
|
|
hide()
|
|
})
|
|
watch(
|
|
() => props.placeholder,
|
|
(val) => {
|
|
placeholderValue.value = `请扫描${val}`
|
|
}
|
|
)
|
|
placeholderValue.value = props.placeholder
|
|
const hide = () => {
|
|
// #ifdef APP-PLUS
|
|
// 只是解决软键盘的闪现
|
|
const interval = setInterval(function () {
|
|
uni.hideKeyboard() // 隐藏软键盘
|
|
console.log('刷新')
|
|
}, 5)
|
|
setTimeout(() => {
|
|
clearInterval(interval)
|
|
console.log('停止刷新')
|
|
}, 1000)
|
|
// #endif
|
|
}
|
|
const getValue = () => {
|
|
return scanMsg.value
|
|
}
|
|
const setValue = (val) => {
|
|
scanMsg.value = val
|
|
}
|
|
const clearScanValue = () => {
|
|
scanMsg.value = ''
|
|
getfocus()
|
|
}
|
|
const clickScanMsg = () => {
|
|
scanMsg.value += '\n'
|
|
handelScanMsg()
|
|
}
|
|
|
|
const handelScanMsg = () => {
|
|
scanMsg.value.replace('\n', '')
|
|
const index = scanMsg.value.indexOf('\n')
|
|
|
|
// if (index >= 0) {
|
|
setTimeout(() => {
|
|
losefocus()
|
|
const content = scanMsg.value.trim()
|
|
if (content == '') {
|
|
getfocus()
|
|
comMessageRef.value.showErrorMessage('扫描内容为空,请重新扫描', (res) => {
|
|
if (res) {
|
|
scanMsg.value = ''
|
|
getfocus()
|
|
}
|
|
})
|
|
return
|
|
}
|
|
const items = scanMsg.value.split('*')
|
|
customerItemCode.value = items[1]
|
|
emit('getResult', customerItemCode.value)
|
|
}, 500)
|
|
// }
|
|
}
|
|
const getfocus = () => {
|
|
nextTick((r) => {
|
|
boxfocus.value = true
|
|
})
|
|
hide()
|
|
}
|
|
const losefocus = () => {
|
|
nextTick((r) => {
|
|
boxfocus.value = false
|
|
})
|
|
}
|
|
const clear = () => {
|
|
if (props.clearResult) {
|
|
cursorIndex.value = 0
|
|
scanMsg.value = ''
|
|
}
|
|
}
|
|
const iconClick = (type) => {
|
|
emit('clearResult', scanMsgk.value)
|
|
}
|
|
const expands = () => {
|
|
expand.value = !expand.value
|
|
expendIcon.value = expand.value == true ? 'arrow-down' : 'arrow-up'
|
|
}
|
|
const scanClick = () => {
|
|
handelScanMsg()
|
|
}
|
|
const cancelClick = () => {
|
|
clear()
|
|
getfocus()
|
|
}
|
|
const showItem = (item) => {
|
|
comMessageRef.value.showMessage(item, (res) => {
|
|
if (res) {
|
|
// this.$refs.modal.cancelClose();
|
|
}
|
|
})
|
|
}
|
|
const scanQRCode = () => {
|
|
uni.scanCode({
|
|
onlyFromCamera: true,
|
|
success: (res) => {
|
|
scanMsg.value = res.result
|
|
emit('getResult', res.result)
|
|
},
|
|
fail: (res) => {
|
|
showItem(`扫描出现错误:${res.result}`)
|
|
console.log(`扫描出现错误:${res.result}`)
|
|
}
|
|
})
|
|
}
|
|
|
|
// 传递给父类
|
|
const emit = defineEmits(['clearResult', 'getResult'])
|
|
defineExpose({
|
|
getfocus,
|
|
losefocus
|
|
})
|
|
</script>
|
|
|
|
<script module="textarea" lang="renderjs">
|
|
export default {
|
|
mounted() {
|
|
document.querySelector('textarea').setAttribute('inputmode', 'none')
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss"></style>
|
|
|