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.
224 lines
4.6 KiB
224 lines
4.6 KiB
<template>
|
|
<view class="content">
|
|
<view>
|
|
<view class="btn">
|
|
<input ref="inputs" v-model="qrCodeRes" type="text" placeholder="请扫码或输入活动码" :focus="isfocus">
|
|
<img :src="scanimg" @click="scanCode" alt="" srcset="">
|
|
</view>
|
|
|
|
<view class="admin">
|
|
<button type="primary" @click="usecode" plain="true">核销</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
let Qrcode = require('../../utils/reqrcode.js')
|
|
export default {
|
|
data() {
|
|
return {
|
|
qrCodeRes:"",
|
|
isfocus:true,
|
|
showQr:false,
|
|
scanimg:require("@/static/scan.png")
|
|
}
|
|
},
|
|
onShow() {
|
|
uni.getNetworkType({
|
|
success: function (res) {
|
|
console.log(res.networkType);//网络类型 wifi、2g、3g、4g、ethernet、unknown、none
|
|
if(res.networkType === "none" ){
|
|
console.log("当前无网络");
|
|
uni.showToast({
|
|
icon:"none",
|
|
title:"当前无网络",
|
|
duration:2000
|
|
})
|
|
}else{
|
|
|
|
}
|
|
}
|
|
});
|
|
},
|
|
methods: {
|
|
usecode() {
|
|
var that = this;
|
|
if(that.qrCodeRes==""){
|
|
uni.showToast({
|
|
icon:"none",
|
|
title:"请扫码或输入活动码",
|
|
duration:2000,
|
|
complete() {
|
|
}
|
|
})
|
|
return
|
|
}
|
|
that.isfocus = false
|
|
that.util.request({
|
|
api: '/api/member/code_use',
|
|
method: "get",
|
|
data: {
|
|
code:that.qrCodeRes
|
|
},
|
|
utilSuccess: function(res) {
|
|
if(res.errcode){
|
|
uni.showToast({
|
|
icon:"none",
|
|
title:res.errmsg,
|
|
duration:4000,
|
|
complete() {
|
|
that.qrCodeRes = "";
|
|
that.isfocus=true
|
|
}
|
|
})
|
|
|
|
}else{
|
|
uni.showToast({
|
|
icon:"none",
|
|
title:res.msg||'核销成功',
|
|
duration:4000,
|
|
complete() {
|
|
that.qrCodeRes = ""
|
|
that.isfocus=true
|
|
}
|
|
})
|
|
|
|
}
|
|
// that.areaList = result.detail
|
|
},
|
|
utilFail: function(res) {
|
|
that.util.alert(res);
|
|
}
|
|
});
|
|
},
|
|
|
|
// 扫码
|
|
scanCode() {
|
|
// #ifdef APP-PLUS
|
|
this.scanCodeAPP()
|
|
// #endif
|
|
|
|
// #ifdef H5
|
|
this.scanCodeH5()
|
|
// #endif
|
|
},
|
|
// APP直接调用 uni.scanCode 接口
|
|
scanCodeAPP() {
|
|
uni.scanCode({
|
|
scanType: ['qrCode'],
|
|
success: (res) => {
|
|
this.qrCodeRes = res.result
|
|
}
|
|
})
|
|
},
|
|
// H5通过拉起相机拍照来识别二维码
|
|
scanCodeH5() {
|
|
uni.chooseImage({
|
|
count: 1,
|
|
success: imgRes => {
|
|
Qrcode.qrcode.decode(this.getObjectURL(imgRes.tempFiles[0]))
|
|
Qrcode.qrcode.callback = (codeRes) => {
|
|
if (codeRes.indexOf('error') >= 0) {
|
|
// 二维码识别失败
|
|
this.qrCodeRes = '不合法二维码:' + codeRes
|
|
} else {
|
|
// 二维码识别成功
|
|
let r = this.decodeStr(codeRes)
|
|
this.qrCodeRes = r
|
|
}
|
|
}
|
|
}
|
|
})
|
|
},
|
|
// 获取文件地址函数
|
|
getObjectURL(file) {
|
|
var url = null
|
|
if (window.createObjectURL !== undefined) { // basic
|
|
url = window.createObjectURL(file)
|
|
} else if (window.URL !== undefined) { // mozilla(firefox)
|
|
url = window.URL.createObjectURL(file)
|
|
} else if (window.webkitURL !== undefined) { // webkit or chrome
|
|
url = window.webkitURL.createObjectURL(file)
|
|
}
|
|
return url
|
|
},
|
|
// 解码,输出:中文
|
|
decodeStr(str) {
|
|
var out, i, len, c;
|
|
var char2, char3;
|
|
out = "";
|
|
len = str.length;
|
|
i = 0;
|
|
while (i < len) {
|
|
c = str.charCodeAt(i++);
|
|
switch (c >> 4) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
// 0xxxxxxx
|
|
out += str.charAt(i - 1);
|
|
break;
|
|
case 12:
|
|
case 13:
|
|
// 110x xxxx 10xx xxxx
|
|
char2 = str.charCodeAt(i++);
|
|
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
|
|
break;
|
|
case 14:
|
|
// 1110 xxxx 10xx xxxx 10xx xxxx
|
|
char2 = str.charCodeAt(i++);
|
|
char3 = str.charCodeAt(i++);
|
|
out += String.fromCharCode(((c & 0x0F) << 12) |
|
|
((char2 & 0x3F) << 6) |
|
|
((char3 & 0x3F) << 0));
|
|
break;
|
|
}
|
|
}
|
|
return out;
|
|
},
|
|
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.content{
|
|
|
|
}
|
|
.btn{
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
.btn input{
|
|
width:calc(100%-80);
|
|
border: 1px solid #ddd;
|
|
height: 40px;
|
|
padding: 15px 10px;
|
|
margin: 10px;
|
|
margin-top: 30px;
|
|
font-size: 26px;
|
|
}
|
|
.btn img{
|
|
width:80px;
|
|
height:80px;
|
|
margin-top:26px;
|
|
margin-right:5px;
|
|
}
|
|
.admin{
|
|
text-align: center;
|
|
}
|
|
.admin button{
|
|
margin:10px;
|
|
margin-top:20px;
|
|
padding: 10px;
|
|
font-size: 24px;
|
|
|
|
}
|
|
</style> |