更新记录

0.0.1(2021-08-09) 下载此版本

  1. 符合uni_modules规范的二维码生成
  2. 对使用进行详细说明

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.1.0 app-vue × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
×

wxy-code

项目需要二维码功能,开始是使用uQRCode 二维码生成插件,需要自己处理图片显示,而且调用比较麻烦,后来参考了二维码生成器 进行了封装,一个是转化为uni_modules规范,二是对代码进行了优化,三是补充了调用示例代码,解决了使用$refs调用makeCode方法是提示未定义的错误,二维码生成有两种方式:

  • 组件方式:使用onval或loadMake属性来监视内容变化,简单需求推荐组件方式
  • $refs方式:调用组件的makeCode方法,此时切记若是提示未定义,就需要将调用代码放置在this.$nextTick中即可解决问题

主要功能介绍

  1. H5、微信小程序、支付宝小程序、APP,其它平台的小程序没有测试
  2. 使用canvas生成
  3. 可设置二维码背景色,前景色,角标色
  4. 可设置二维码logo

示例代码

  1. 场景一:页面加载即显示(固定文本)
<wxy-code val="cls20201090123" loadMake></wxy-code>
  1. 场景二:页面加载即显示(文本变量)
<!-- 方法一:在onLoad中一定要使用this.$nextTick来改变,使用onval或loadMake都可以,因为$nextTick是在组件挂载mouted之前 -->
<wxy-code :val="val" loadMake></wxy-code>
<script>
export default {
    data() {
        return {
            val: '',
        };
    },
    onLoad(options) {
        this.$nextTick(()=>{
            this.val = options.qrcode;
        })
    },
};
<!-- 方法二:在onReady中改变,只能用onval,因为onReady是在组件挂载mouted之后 -->
<wxy-code :val="val" onval></wxy-code>
<script>
export default {
    data() {
        return {
            val: '',
        };
    },
    onReady:function(){
        this.val=this.qrcode;
    },
    onLoad(options) {
        this.qrcode = options.qrcode;
    },
};
  1. 场景三:弹窗组件中显示二维码

说实在话,这也是测试花费时间最多的地方,上面两个官方插件市场中在这方面感觉未作详细说明,下面示例使用的是弹窗组件wxy-popup

<!-- 组件方式,要注意APP和H5要用loadMake,而小程序则要用onval -->
<template>
    <wxy-page>
        <view class="code" style="margin-top:30vh;">
            <button type="default" @click="btnPopCode">弹窗生成二维码</button>
        </view>
        <wxy-popup v-model="show" mode='center'>
            <!-- #ifdef MP -->
            <wxy-code :val="popval" onval></wxy-code>
            <!-- #endif -->
            <!-- #ifndef MP -->
            <wxy-code :val="popval" loadMake></wxy-code>
            <!-- #endif -->

        </wxy-popup>
    </wxy-page>
</template>
<script>
export default {
    data() {
        return {
            val: '',
            show: false,
        };
    },
    methods: {
        btnPopCode:function(){          
            this.val='cls2020090712789';            
            this.show=true; 
        },
    }
};
</script>
<!-- $refs方式,makeCode要放在$nextTick回调函数中才可以 -->
<template>
    <wxy-page>
        <view class="code" style="margin-top:30vh;">
            <button type="default" @click="btnPopCode">弹窗生成二维码</button>
        </view>
        <wxy-popup v-model="show" mode='center'>
            <wxy-code ref='qrcode' :val="val" ></wxy-code>
        </wxy-popup>
    </wxy-page>
</template>
<script>
export default {
    data() {
        return {
            val: '',
            show: false,
        };
    },
    methods: {
        btnPopCode:function(){          
            this.val='cls2020090712789';            
            this.$nextTick(()=>{
                this.$refs.qrcode.makeCode();
            });
            this.show=true; 
        },
    }
};
</script>

属性

属性名 类型 默认值 可选值 说明
cid String wxy-code-canvas canvasId,页面存在多个二维码组件时需设置不同的ID
size Number 200 生成的二维码大小
unit String upx px 大小单位尺寸
show Boolean true 默认使用组件中的image标签显示二维码
val String 二维码 要生成的内容
background String #000000 二维码背景色
foreground String #ffffff 二维码前景色
pdground String #ffffff 二维码角标色
icon String 二维码图标URL(必须是本地图片,网络图需要先下载至本地)
iconSize Number 40注意此大小不会跟随二维码size 动态变化,设置时需注意大小,不要太大,以免无法识别 二维码图标大小
lv Number 3(一般不用设置) 容错级别
onval Boolean false 监听val值变化自动重新生成二维码
loadMake Boolean false 组件初始化完成后自动生成二维码,val需要有值
usingComponents Boolean true false 是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题)
showLoading Boolean true false 是否显示loading
loadingText String 二维码生成中 loading文字

方法

方法名 参数 默认值 说明
makeCode() 生成二维码
clearCode() 清空二维码(清空二维码会触发result回调 返回值为空)
saveCode() 保存二维码到图库

事件

事件名 返回值 说明
result 生成的图片base64或图片临时地址 返回二维码路径 注:_clearCode()后返回空

最后要感谢原作者的分享

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问