uni-app自定义app端的扫码界面
<p>记得当时是在西班牙有这样的一个需求,需要自定义扫码页面,还需要加上西班牙文,当时是在一个组件里面找到了这样的一个方法,全文大部分使用的app端的Native里面的方法,记录一下,跑路了项目代码要删库了</p><p><img src="https://img2018.cnblogs.com/i-beta/1680246/201912/1680246-20191221172856852-1908225784.png"></p>
<p> </p>
<p> 效果图大概是这样的</p>
<p><br><br>以下是vue页面代码<br><template><br> <view></view><br></template><br><script><br>import { mapState, mapMutations } from 'vuex';<br>var barcode = null;<br>export default {<br> data() {<br> return {<br> name: 'PUEDES ENCONTRAR EL QR AQUÍ', //要在扫码界面自定义的内容<br> flash: false, //是否打开摄像头<br> type: 'scan-listener'<br> };<br> },<br> onLoad(d) {<br> var pages = getCurrentPages();<br> var page = pages;<br> // #ifdef APP-PLUS<br> plus.navigator.setFullscreen(true); //全屏<br> var currentWebview = page.$getAppWebview();<br> this.createBarcode(currentWebview); //创建二维码窗口<br> this.createView(currentWebview); //创建操作按钮及tips界面<br> // #endif<br> },<br> computed: {<br> ...mapState(['token', 'user', 'powerBank', 'rackData', 'orderNum', 'slotId']),<br> i18n() {<br> return this.$t('richScan');<br> }<br> },<br> methods: {<br> ...mapMutations(['tokenStorage', 'powerBankStorage']),<br> // 扫码成功回调<br> onmarked(type, result) {<br> var text = '未知: ';<br> console.log('内容' + JSON.stringify(result));<br> switch (type) {<br> case plus.barcode.QR:<br> text = 'QR: ';<br> break;<br> case plus.barcode.EAN13:<br> text = 'EAN13: ';<br> break;<br> case plus.barcode.EAN8:<br> text = 'EAN8: ';<br> break;<br> }<br> plus.navigator.setFullscreen(false);<br> let results = result.match(/WXXH.*/gi) + '';<br> this.powerBankStorage(results);<br> console.log(typeof this.powerBank);<br> uni.redirectTo({<br> url: '/pages/money/paydeposit'<br> });<br> // this.$eventHub.$emit(this.type, {<br> // result: result<br> // });<br> barcode.close();<br> },<br> // 创建二维码窗口<br> createBarcode(currentWebview) {<br> barcode = plus.barcode.create('barcode', , {<br> top: '0',<br> left: '0',<br> width: '100%',<br> height: '100%',<br> scanbarColor: '#1DA7FF',<br> position: 'static',<br> frameColor: '#1DA7FF'<br> });<br> barcode.onmarked = this.onmarked;<br> barcode.setFlash(this.flash);<br> currentWebview.append(barcode);<br> barcode.start();<br> },<br> // 创建操作按钮及tips<br> createView(currentWebview) {<br> //顶部指引<br> var guide = new plus.nativeObj.View(<br> 'guide',<br> {<br> top: '12%',<br> left: '20%',<br> height: '150px',<br> width: '218px'<br> },<br> [<br> {<br> tag: 'img',<br> id: 'backBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/prompt.png',<br> position: {<br> top: '0',<br> left: '0',<br> width: '235px',<br> height: '161px'<br> }<br> }<br> ]<br> );<br> // 创建返回原生按钮<br> var backVew = new plus.nativeObj.View(<br> 'backVew',<br> {<br> top: '0px',<br> left: '0px',<br> height: '40px',<br> width: '100%'<br> },<br> [<br> {<br> tag: 'img',<br> id: 'backBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/backBar.png',<br> position: {<br> top: '2px',<br> left: '3px',<br> width: '35px',<br> height: '35px'<br> }<br> }<br> ]<br> );<br> // 创建打开手电筒的按钮<br> var scanBarVew = new plus.nativeObj.View(<br> 'scanBarVew',<br> {<br> top: '70%',<br> left: '40%',<br> height: '10%',<br> width: '20%'<br> },<br> [<br> {<br> tag: 'img',<br> id: 'scanBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/scanBar.png',<br> position: {<br> width: '28%',<br> left: '36%',<br> height: '30%'<br> }<br> },<br> {<br> tag: 'font',<br> id: 'font',<br> text: this.i18n.open,<br> textStyles: {<br> size: '10px',<br> color: '#ffffff'<br> },<br> position: {<br> width: '80%',<br> left: '10%'<br> }<br> }<br> ]<br> );<br> // 创建展示类内容组件<br> var content = new plus.nativeObj.View(<br> 'content',<br> {<br> top: '0px',<br> left: '0px',<br> height: '100%',<br> width: '100%'<br> },<br> [<br> {<br> tag: 'font',<br> id: 'scanTitle',<br> text: '',<br> textStyles: {<br> size: '18px',<br> color: '#ffffff'<br> },<br> position: {<br> top: '0px',<br> left: '0px',<br> width: '100%',<br> height: '40px'<br> }<br> },<br> {<br> tag: 'font',<br> id: 'scanTips',<br> text: this.i18n.name,<br> textStyles: {<br> size: '14px',<br> color: '#ffffff',<br> whiteSpace: 'normal'<br> },<br> position: {<br> top: '90px',<br> left: '10%',<br> width: '80%',<br> height: 'wrap_content'<br> }<br> }<br> ]<br> );<br> if (this.$i18n.locale == 'en-US') {<br> //打开蓝牙指引<br> var SpiderGuideIcon = new plus.nativeObj.View(<br> 'SpiderGuideIcon',<br> {<br> left: '0%',<br> right: '0',<br> bottom: '0',<br> height: '60px'<br> },<br> [<br> {<br> tag: 'img',<br> id: 'backBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/bluetooth.png',<br> position: {<br> left: '0',<br> right: '0',<br> bottom: '0',<br> height: '60px'<br> }<br> }<br> ]<br> );<br> } else {<br> //打开蓝牙指引<br> var SpiderGuideIcon = new plus.nativeObj.View(<br> 'SpiderGuideIcon',<br> {<br> left: '0%',<br> right: '0',<br> bottom: '0',<br> height: '60px'<br> },<br> [<br> {<br> tag: 'img',<br> id: 'backBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/hybrid/lanyas.png',<br> position: {<br> left: '0',<br> right: '0',<br> bottom: '0',<br> height: '60px'<br> }<br> }<br> ]<br> );<br> }<br> backVew.interceptTouchEvent(true);<br> scanBarVew.interceptTouchEvent(true);<br> currentWebview.append(guide); //顶部指引<br> currentWebview.append(content);<br> currentWebview.append(scanBarVew);<br> currentWebview.append(backVew);<br> currentWebview.append(SpiderGuideIcon);<br> backVew.addEventListener(<br> 'click',<br> function(e) {<br> //返回按钮<br> uni.navigateBack({<br> delta: 1<br> });<br> barcode.close();<br> plus.navigator.setFullscreen(false);<br> },<br> false<br> );<br> var temp = this;<br> scanBarVew.addEventListener(<br> 'click',<br> function(e) {<br> //点击按钮点亮手电筒<br> temp.flash = !temp.flash;<br> if (temp.flash) {<br> scanBarVew.draw([<br> {<br> tag: 'img',<br> id: 'scanBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/yellow-scanBar.png',<br> position: {<br> width: '28%',<br> left: '36%',<br> height: '30%'<br> }<br> },<br> {<br> tag: 'font',<br> id: 'font',<br> text: temp.i18n.close,<br> textStyles: {<br> size: '10px',<br> color: '#ffffff'<br> },<br> position: {<br> width: '80%',<br> left: '10%'<br> }<br> }<br> ]);<br> } else {<br> scanBarVew.draw([<br> {<br> tag: 'img',<br> id: 'scanBar',<br> src: 'https://upower-spain.oss-eu-central-1.aliyuncs.com/spain/app/scanBar.png',<br> position: {<br> width: '28%',<br> left: '36%',<br> height: '30%'<br> }<br> },<br> {<br> tag: 'font',<br> id: 'font',<br> text: temp.i18n.open,<br> textStyles: {<br> size: '10px',<br> color: '#ffffff'<br> },<br> position: {<br> width: '80%',<br> left: '10%'<br> }<br> }<br> ]);<br> }<br> if (barcode) {<br> barcode.setFlash(temp.flash);<br> }<br> },<br> false<br> );<br> }<br> },<br> onBackPress() {<br> // #ifdef APP-PLUS<br> // 点击返回时退出全屏<br> barcode.close();<br> plus.navigator.setFullscreen(false);<br> // #endif<br> },<br> onUnload() {<br> plus.navigator.setFullscreen(false);<br> }<br>};<br></script></p>
<p><style scoped><br>//@import '../../common/uni.css';<br></style></p>
</div>
<div id="MySignature" role="contentinfo">
流下了没有技术的泪水<br><br>
来源:https://www.cnblogs.com/Mr-ZhangH/p/12077603.html
頁:
[1]