Commit fe4eae37146068f01ba08f033e0c2e8bd03e48b5
Committed by
GitHub
1 parent
14fb21d0
fix(qrcode): Fix the problem that the QR code cannot be dynamically generated (#974)
* fix: Fix the problem that the QR code cannot be dynamically generated * Fix the problem that the size of the QR code is automatically changed when dynamically generated
Showing
2 changed files
with
20 additions
and
7 deletions
src/components/Qrcode/src/Qrcode.vue
... | ... | @@ -4,7 +4,7 @@ |
4 | 4 | </div> |
5 | 5 | </template> |
6 | 6 | <script lang="ts"> |
7 | - import { defineComponent, watchEffect, PropType, ref, unref } from 'vue'; | |
7 | + import { defineComponent, watch, PropType, ref, unref } from 'vue'; | |
8 | 8 | import { toCanvas, QRCodeRenderersOptions, LogoType } from './qrcodePlus'; |
9 | 9 | import { toDataURL } from 'qrcode'; |
10 | 10 | import { downloadByUrl } from '/@/utils/file/download'; |
... | ... | @@ -93,11 +93,16 @@ |
93 | 93 | }); |
94 | 94 | } |
95 | 95 | |
96 | - watchEffect(() => { | |
97 | - setTimeout(() => { | |
98 | - createQrcode(); | |
99 | - }, 30); | |
100 | - }); | |
96 | + // 监听参数变化重新生成二维码 | |
97 | + watch( | |
98 | + props, | |
99 | + () => { | |
100 | + createQrcode() | |
101 | + }, | |
102 | + { | |
103 | + deep: true, | |
104 | + } | |
105 | + ) | |
101 | 106 | |
102 | 107 | return { wrapRef, download }; |
103 | 108 | }, | ... | ... |
src/components/Qrcode/src/drawCanvas.ts
1 | 1 | import { toCanvas } from 'qrcode'; |
2 | 2 | import type { QRCodeRenderersOptions } from 'qrcode'; |
3 | 3 | import { RenderQrCodeParams, ContentType } from './typing'; |
4 | -export const renderQrCode = ({ canvas, content, width = 0, options = {} }: RenderQrCodeParams) => { | |
4 | +import { cloneDeep } from 'lodash-es'; | |
5 | + | |
6 | +export const renderQrCode = ({ | |
7 | + canvas, | |
8 | + content, | |
9 | + width = 0, | |
10 | + options: params = {} | |
11 | +}: RenderQrCodeParams) => { | |
12 | + const options = cloneDeep(params) | |
5 | 13 | // 容错率,默认对内容少的二维码采用高容错率,内容多的二维码采用低容错率 |
6 | 14 | options.errorCorrectionLevel = options.errorCorrectionLevel || getErrorCorrectionLevel(content); |
7 | 15 | ... | ... |