140 lines
2.9 KiB
Vue
140 lines
2.9 KiB
Vue
|
<template>
|
|||
|
<view>
|
|||
|
<view class="input-box">
|
|||
|
<view class="input-item" v-if="state.show">
|
|||
|
<up-input :placeholder="props.placeholder" border="none" clearable inputAlign="left" v-model="state.inputText"
|
|||
|
@confirm="confirmfun">
|
|||
|
<template #prefix>
|
|||
|
<up-icon :name="props.icon" color="#2979ff" size="24"></up-icon>
|
|||
|
</template>
|
|||
|
</up-input>
|
|||
|
</view>
|
|||
|
<view class="codeBox" v-else>
|
|||
|
<tki-qrcode cid="qrcode" ref="qrcode" :val="state.inputText" :size="170" unit="upx" :loadMake="true"
|
|||
|
:usingComponents="true" />
|
|||
|
<view class="codeBoxText">
|
|||
|
<view>单据:{{ props.dataType }}</view>
|
|||
|
<view>编码:</view>
|
|||
|
<view class="container chinese-text">{{ state.inputText }}</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!-- #ifdef APP-PLUS -->
|
|||
|
<qs-scanlistener @scan="scanFun" />
|
|||
|
<!-- #endif -->
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script lang="ts" setup>
|
|||
|
import { reactive, nextTick, defineProps, defineEmits, defineExpose,watch } from 'vue';
|
|||
|
import { useI18n } from 'vue-i18n'
|
|||
|
const getI18n = useI18n()
|
|||
|
const { t, locale } = getI18n
|
|||
|
const emits = defineEmits(['inputConfirm', 'scanConfirm'])
|
|||
|
const props = defineProps({
|
|||
|
icon: {
|
|||
|
type: String,
|
|||
|
default: () => 'search'
|
|||
|
},
|
|||
|
placeholder: {
|
|||
|
type: String,
|
|||
|
default: () => '请输入内容'
|
|||
|
},
|
|||
|
dataType: {
|
|||
|
type: String,
|
|||
|
default: () => '来料验证'
|
|||
|
},
|
|||
|
fence: {
|
|||
|
type: Array,
|
|||
|
default: () => {
|
|||
|
return [false]
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
watch(()=> props.fence,(val1,val2) => {
|
|||
|
console.log(val1,val2);
|
|||
|
})
|
|||
|
const state = reactive({
|
|||
|
inputText: '',
|
|||
|
show: true
|
|||
|
})
|
|||
|
const scanFun = (res : any) => {
|
|||
|
console.log(props.fence.filter((item : any) => item));
|
|||
|
if (props.fence.filter((item : any) => item).length === 0) {
|
|||
|
state.inputText = res
|
|||
|
state.show = false
|
|||
|
console.log(res);
|
|||
|
emits('scanConfirm', res)
|
|||
|
}
|
|||
|
}
|
|||
|
const confirmfun = (e : any) => {
|
|||
|
emits('inputConfirm', e)
|
|||
|
}
|
|||
|
const closeFun = (time : number = 2000) => {
|
|||
|
setTimeout(() => {
|
|||
|
state.inputText = ''
|
|||
|
state.show = true
|
|||
|
emits('inputConfirm', '')
|
|||
|
},time)
|
|||
|
}
|
|||
|
defineExpose({
|
|||
|
closeFun
|
|||
|
})
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss">
|
|||
|
.container {
|
|||
|
overflow-wrap: break-word;
|
|||
|
word-break: normal;
|
|||
|
hyphens: auto;
|
|||
|
/* 支持连字符换行 */
|
|||
|
}
|
|||
|
|
|||
|
/* 中文强制换行 */
|
|||
|
.chinese-text {
|
|||
|
word-break: break-all;
|
|||
|
}
|
|||
|
|
|||
|
.input-box {
|
|||
|
background-color: white;
|
|||
|
box-sizing: border-box;
|
|||
|
padding: 0 16rpx;
|
|||
|
border-radius: 24rpx;
|
|||
|
margin: 0 0 32rpx 0;
|
|||
|
|
|||
|
.u-textarea {
|
|||
|
padding: 0 !important;
|
|||
|
font-size: 24rpx !important;
|
|||
|
color: #999999 !important;
|
|||
|
}
|
|||
|
|
|||
|
.input-item {
|
|||
|
box-sizing: border-box;
|
|||
|
padding: 16rpx 0;
|
|||
|
color: #222222;
|
|||
|
font-size: 28rpx;
|
|||
|
font-weight: 400;
|
|||
|
|
|||
|
.item-title {
|
|||
|
//font-weight: 500;
|
|||
|
font-size: 32rpx;
|
|||
|
color: #333333;
|
|||
|
}
|
|||
|
|
|||
|
.item-text {
|
|||
|
font-weight: 400;
|
|||
|
font-size: 27rpx;
|
|||
|
color: #999999;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.codeBox {
|
|||
|
padding: 36rpx 24rpx 24rpx 18rpx;
|
|||
|
display: flex;
|
|||
|
|
|||
|
.codeBoxText {
|
|||
|
margin-left: 32rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|