uni-app 条形码(一维码)/二维码生成实现

朱雀 2021-03-29 10:56 1924阅读 0赞

组件推荐

我们在用 uni-app 开发前端时,有时会用到条形码或者二维码,甚至一个页面同时用到条形码和二维码。笔者推荐使用以下两个组件:

uni-app 条形码生成器:barcode 源码和文档说明
uni-app 二维码生成器:qrcode 源码和文档说明

不过,有点小小的遗憾,这两个组件存在一些不完美的地方。笔者进行了一些优化,并修复了在支付宝小程序中使用无法刷新条形码的问题。大家也可以直接下载笔者优化后的文件(uniapp条形码和二维码生成器.zip),解压后(条形码:tki-barcode、二维码:tki-qrcode)放在 components 文件夹下。

使用方式

自定义组件

自定义一个组件,代码如下:

  1. <template>
  2. <view class="component text-center">
  3. <view class="component-title">条形码和二维码混用</view>
  4. <view class="component-code">
  5. <tki-barcode
  6. ref="barcode"
  7. onval
  8. :val="code"
  9. :load-make="true"
  10. :opations="barOpations"/>
  11. </view>
  12. <view class="component-qr">
  13. <tki-qrcode
  14. ref="qrcode"
  15. onval
  16. :val="code"
  17. :size="250"
  18. :load-make="true"
  19. :show-loading="false"/>
  20. </view>
  21. <view class="coupon-no-view">
  22. <text>编号:</text>
  23. <text class="coupon-no">{{ code }}</text>
  24. </view>
  25. </view>
  26. </template>
  27. <script>
  28. import tkiBarcode from '@/components/tki-barcode/tki-barcode'
  29. import tkiQrcode from '@/components/tki-qrcode/tki-qrcode'
  30. export default {
  31. components: {
  32. tkiBarcode,
  33. tkiQrcode
  34. },
  35. data() {
  36. return {
  37. code: '',
  38. barOpations: {
  39. height: 150,
  40. displayValue: false
  41. }
  42. }
  43. },
  44. methods: {
  45. init () {
  46. this.code = '1234567890' // 生成一维码和二维码
  47. setTimeout(() => {
  48. this.code = '0987654321' // 5 秒后刷新一维码和二维码
  49. }, 5000)
  50. }
  51. }
  52. }
  53. </script>
  54. <style lang="scss" scoped>
  55. .component {
  56. border-radius: 16rpx;
  57. overflow: hidden;
  58. display: flex;
  59. flex-direction: column;
  60. background: #FFFFFF;
  61. flex: 1;
  62. margin: 64rpx;
  63. padding: 64rpx 32rpx;
  64. &-title {
  65. max-height: 112rpx;
  66. font-size: 40rpx;
  67. font-weight: 600;
  68. line-height: 56rpx;
  69. overflow: hidden;
  70. }
  71. &-code {
  72. height: 150rpx;
  73. margin: 32rpx 32rpx 0;
  74. }
  75. &-qr {
  76. height: 250rpx;
  77. margin-top: 36rpx;
  78. }
  79. .coupon-no-view {
  80. margin: 0 18rpx;
  81. height: 76rpx;
  82. border-radius: 8rpx;
  83. border: 2px solid #F5F5F5;
  84. display: flex;
  85. align-items: center;
  86. padding: 0 24rpx;
  87. margin-top: 36rpx;
  88. text {
  89. font-size: 24rpx;
  90. font-weight: 400;
  91. &:first-child {
  92. color: #999999;
  93. }
  94. }
  95. .coupon-no {
  96. flex: 1;
  97. text-align: left;
  98. }
  99. }
  100. }
  101. </style>

使用自定义组件

在需要使用这个组件的地方引入使用,并在 onLoad 或其他需要使用一维码/二维码的方法中直接调用 init,如下:

  1. export default {
  2. onLoad(option){
  3. this.$nextTick(() => {
  4. this.$refs['code'].init()
  5. })
  6. }
  7. }

最终效果图如下:

发表评论

表情:
评论列表 (有 1 条评论,1924人围观)
蒲公英云E124D1
蒲公英云E124D1V铁粉 2022-08-07 03:43
在哪下载文件?

相关阅读