vue3+vant4+微信公众号实现图片上传和扫一扫功能

这里我只记录了js的实现过程

首先先安装weixin-js-sdk

npm install weixin-js-sdk

处理JS-SDK配置,前提是已经从后端获取到了appId和openId

<script setup>
import { ref, onMounted } from "vue";
import { imageConfig } from "@/api";//后端接口
import wx from 'weixin-js-sdk'
let form = ref([])
onMounted(() => {getImageConfig();
});
const getImageConfig = async () => {//请求后端接口获取数据用于配置JS-SDK,接口参数根据后端要求有所不同,//注意的是url获取的是地址栏上的哈希路由地址#前面的内容,如果用的是history路由方式会有所不同let res = await imageConfig({appId: "",url: window.location.href.split("#")[0],});if (res.code == 200) {wx.config({debug: true, //开启调试模式,调用的所有api的返回值会在客户端alert出来appId: "", //必填,公众号的唯一标识timestamp: res.data.timestamp, //必填,时间戳nonceStr: res.data.nonceStr, //必填,随机串signature: res.data.signature, //必填,签名jsApiList: ["chooseImage","uploadImage","scanQRCode","hideAllNonBaseMenuItem","getLocalImgData",], //必填,需要使用的js接口列表});wx.ready(function () {//config信息验证后会执行ready方法,所有接口调用必须在config接口获得结果之后,//config是一个客户端的异步操作,所以如果需要在页面加载时就要调用相关接口,则需把相关接口放在ready函数中调用来确保正确执行//对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中});wx.error(function (res) {alert(res);//config信息验证失败会执行error函数,如果签名国企导致的验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名});}
};
const upClick = () => {wx.chooseImage({count: 9, //默认是9.一次允许选在的图片数量sizeType: ["compressed"], //可以指定是原图还是压缩图,默认二者都有sourceType: ["album", "camera"], //可以指定来源是相册还是相机,默认两者都有success: function (res) {let localIds = res.localIds; //返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片,但是IOS系统的不显示需要特殊处理let localIdsLength = localIds.localIdsLength;localIds = localIds.reverse(); //数组颠倒顺序uploadImage(localIds, localIdsLength);},});
};
//选择图片
const uploadImage = (localIds, localIdsLength) => {let localId = localIds[0];let isIOS = false;let localDate = null;if (window.__wxjs_is_wkwebview) {//判断是不是IOS系统isIOS = true;wx.getLocalImgDate({localId: localId,success: function (res) {localDate = res.localDate;localDate = localDate.replace("jpg", "jpeg");},});}//上传图片wx.uploadImage({localId: localId, //上传的图片的本地IdisShowProgressTips: 1, //默认为1,显示进度提示success: function (resq) {let serverId = resq.serverIdif (isIOS) {form.value.push({imgPath:localDate,imgId:serverId})}else{form.value.push({imgPath:localId,imgId:serverId})}localIdsLength--;localIds.shift()if (localIdsLength>0) {uploadImage(localIds, localIdsLength);//递归,解决一次上传多张图片问题}}});
};
//扫一扫
const imgylsao = (index) =>{wx.csanQRCode({needResult:1,//默认为0,扫描结果由微信处理,1则直接返回扫描结果scanType:['qrCode','barCode'],//可以指定扫二维码还是一维码,默认两者都有success:function(res){let result = res.resultStr//当needResult为1时,扫码返回的结果if (result != undefined && result.split(",").length > 3) {//二维码form.value[index].invoiceNum = result.split(",")[3].match(/\d+/g);}else{form.value[index].invoiceNum = result.substring(result.lastIndexOf(',')+1,result.length).match(/\d+/g);}}})
}
</script> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution { public:bool circularArrayLoop(vector<int>& nums) {int n nums.size();auto next [&](int cur) {return ((cur nums[cur]) % n n) % n; // 保证返回值在 [0,n) 中};for (int i 0; i < n; i) {if …

【论文速看】DL最新进展20241009-图像生成、多模态、医学扩散模型、行人重识别

目录 【图像生成】【多模态】【医学扩散模型】【行人重识别】 【图像生成】 [2024] CAR: Controllable Autoregressive Modeling for Visual Generation 论文链接&#xff1a;https://arxiv.org/pdf/2410.04671 代码链接&#xff1a;https://github.com/MiracleDance/CAR 可控…

torchvision.transforms.Resize()的用法

今天我在使用torchvision.transforms.Resize()的时候发现&#xff0c;一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面&#xff0c;torchvision.transforms.Resize((size,size))&#xff0c;大家都很清楚&#xff0c;会将图像的h和w大小都变成size。 但是…

Wasserstein距离

Wasserstein距离&#xff08;Wasserstein distance&#xff09;&#xff0c;又称为推土机移动距离&#xff08;Earth Mover’s Distance, EMD&#xff09;&#xff0c;是度量理论中用来比较两个概率分布之间差异的一种距离度量。它源自最优传输问题&#xff08;Optimal Transpo…

gpt为什么可以依据上下文来回答问题,依据的是什么原理

GPT 可以依据上下文回答问题&#xff0c;主要依据以下几个原理&#xff1a; Transformer 架构&#xff1a; 并行计算与长距离依赖处理&#xff1a;Transformer 架构摒弃了传统的递归神经网络和长短时记忆网络的序列依赖处理方式&#xff0c;具有并行计算的能力。它可以同时处理…

洞察AI趋势:智享AI直播,打造专属你的数字化直播AIGC系统!

洞察AI趋势&#xff1a;智享AI直播&#xff0c;打造专属你的数字化直播AIGC系统&#xff01; 在当今这个日新月异的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的未来科技&#xff0c;而是正深刻改变着我们生活、工作的每一个角落。其中&#xf…

[ROS2]解决PyQt5和sip的各种报错问题 stderr: qt_gui_cpp

前言 编译ros环境的时候遇到了qt_gui_cpp各种编译问题&#xff0c;但是鉴于网上解决方法基本没有&#xff0c;故记录下来帮助后来者。整篇文章总结下来就是一句话&#xff1a;PyQt5和sip安装过程或安装版本有问题&#xff0c;需要重新安装。 问题与解决方法 如果PyQt5你是正…

DAMA数据管理知识体系(第12章 元数据管理)

课本内容 12.1 引言 图12-1 语境关系图&#xff1a;元数据概念理解 元数据的信息范围很广&#xff0c;不仅包括技术和业务流程、数据规则和约束&#xff0c;还包括逻辑数据结构与物理数据结构等。它描述了数据本身&#xff08;如数据库、数据元素、数据模型&#xff09;&#x…

女性议题,正在成为喜综困境?

《脱口秀和Ta的朋友们》&#xff08;以下简称《脱友》&#xff09;与《喜剧之王单口季》&#xff08;以下简称《喜单》&#xff09;两档喜综的对垒&#xff0c;竟然意外走向了同一个落点&#xff1a;对女性视角的收割。 #杨笠 这是血肉在疯长的声音# #杨笠 不是敢说是不知道这…

滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用

全文目录&#xff1a; 前言8.3 JSON与全文检索1. JSON数据类型的使用1.1 JSON 数据类型概述1.2 JSON 数据的插入与查询1.3 JSON 常用函数与操作1.4 JSON使用的优缺点与性能考虑 2. 全文索引与全文检索2.1 全文索引概述2.2 全文检索的使用2.3 全文检索模式2.4 全文索引优化与性能…

react-问卷星项目(4)

项目实战 使用CSS 尽量不要使用内联CSS 内联style代码多&#xff0c;性能差&#xff0c;扩展性差外链css文件可复用代码&#xff0c;可单独缓存文件 元素内联style 和HTMl元素的style相似必须用JS写法&#xff0c;不能是字符串&#xff0c;里面必须是对象 <span style…

洛谷P5648

洛谷P5648 这题花了很长时间&#xff0c;是在线段树题单里找到的&#xff08; &#xff09;。有线段树做法&#xff0c;但是我感觉可能比倍增做法更难看懂。以后有空再看看吧。感觉线段树现在只会板子题&#xff0c;绿稍微难点可能就不会。 花了很久时间之后&#xff0c;就觉得…

【YOLO学习】YOLOv5口罩检测实战

文章目录 1. 环境配置2. 下载代码3. 安装库3.1 安装pytorch3.2 安装其他库 4. 测试5. 数据标注6. 模型训练6.1 一些修改6.2 训练 7. 界面可视化 1. 环境配置 1. 先参考其他文章安装 Anaconda 或者 Miniconda&#xff0c;我安装的是 Miniconda。 2. 更换国内源&#xff0c;以加快…

LLM详解

一 定义 Large Language Model&#xff0c;称大规模语言模型或者大型语言模型&#xff0c;是一种基于大量数据训练的统计语言模型&#xff0c;可用于生成和翻译文本和其他内容&#xff0c;以及执行其他自然语言处理任务&#xff08;NLP&#xff09;&#xff0c;通常基于深度神…

vue 的属性绑定

双大括号不能在 HTML attributes 中使用。想要响应式地绑定一个 attribute&#xff0c;应该使用 v-bind 指令。 <template> <div v-bind:class"boxClass" v-bind:id"boxId"> </div> </template><script> export default{da…

VNC轻松连接远程Linux桌面

Linux配置VNC&#xff08;以RedHat、CentOS为例&#xff09; 说明&#xff1a; Linux平台安装VNCServer Windows平台使用VNC-Viewer 1.在Linux平台安装VNCServer服务端软件包。 yum -y install vnc *vnc-server*2.修改VNCServer主配置文件 vi /etc/sysconfig/vncservers复制…

【Redis】Set类型的常用命令与应用场景

目录 1.命令小结 2.命令解析 3.编码方式与应用场景 1.命令小结 &#xff08;1&#xff09;set的特点 1&#xff09;set中存放的数据也都是String类型 2&#xff09;set集合中的元素是无须的 3&#xff09;set集合中的元素是唯一的&#xff0c;不可重复 &#xff08;2&a…

RISC-V开发 linux下GCC编译自定义指令流程笔记

第一步&#xff1a;利用GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言 第二步&#xff1a;利用RSIC-V的中的.insn模板进行自定义指令的插入 第三步&#xff1a;RISC-V开发环境的搭建 C语言插入汇编 GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言语句方便了…

在树莓派上部署安装OAK

OAK设备可以与微型主机&#xff08;例如树莓派&#xff09;进行连接&#xff0c;在树莓派上安装DepthAI, 需要安装相关依赖Dependencies并且可以通过pip安装Depthai Library. DepthAI Library 在PyPi上对树莓派有预构建的 wheels 使用预配置的树莓派OS 镜像 我们提供预安装了D…

期权懂|面对期权下跌该如何操作呢?

本期让我懂 你就懂的期权懂带大家来了解&#xff0c;面对期权下跌该如何操作呢&#xff1f;有兴趣的朋友可以看一下。期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 面对期权下跌该如何操作呢&#xff1f; 首先我们需要保持冷静…