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.

227 lines
4.8 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>