|  | @@ -8,6 +8,7 @@
 | 
	
		
			
				|  |  |    import { toCanvas, QRCodeRenderersOptions, LogoType } from './qrcodePlus';
 | 
	
		
			
				|  |  |    import { toDataURL } from 'qrcode';
 | 
	
		
			
				|  |  |    import { downloadByUrl } from '/@/utils/file/download';
 | 
	
		
			
				|  |  | +  import { QrcodeDoneEventParams } from './types';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    export default defineComponent({
 | 
	
		
			
				|  |  |      name: 'QrCode',
 | 
	
	
		
			
				|  | @@ -38,10 +39,9 @@
 | 
	
		
			
				|  |  |          validator: (v: string) => ['canvas', 'img'].includes(v),
 | 
	
		
			
				|  |  |        },
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    emits: { done: (url: string) => !!url, error: (error: any) => !!error },
 | 
	
		
			
				|  |  | +    emits: { done: (data: QrcodeDoneEventParams) => !!data, error: (error: any) => !!error },
 | 
	
		
			
				|  |  |      setup(props, { emit }) {
 | 
	
		
			
				|  |  |        const wrapRef = ref<HTMLCanvasElement | HTMLImageElement | null>(null);
 | 
	
		
			
				|  |  | -      const urlRef = ref<string>('');
 | 
	
		
			
				|  |  |        async function createQrcode() {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |            const { tag, value, options = {}, width, logo } = props;
 | 
	
	
		
			
				|  | @@ -58,8 +58,7 @@
 | 
	
		
			
				|  |  |                content: renderValue,
 | 
	
		
			
				|  |  |                options: options || {},
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  | -            urlRef.value = url;
 | 
	
		
			
				|  |  | -            emit('done', url);
 | 
	
		
			
				|  |  | +            emit('done', { url, ctx: (wrapEl as HTMLCanvasElement).getContext('2d') });
 | 
	
		
			
				|  |  |              return;
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -70,8 +69,7 @@
 | 
	
		
			
				|  |  |                ...options,
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |              (unref(wrapRef) as HTMLImageElement).src = url;
 | 
	
		
			
				|  |  | -            urlRef.value = url;
 | 
	
		
			
				|  |  | -            emit('done', url);
 | 
	
		
			
				|  |  | +            emit('done', { url });
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          } catch (error) {
 | 
	
		
			
				|  |  |            emit('error', error);
 | 
	
	
		
			
				|  | @@ -81,7 +79,13 @@
 | 
	
		
			
				|  |  |         * file download
 | 
	
		
			
				|  |  |         */
 | 
	
		
			
				|  |  |        function download(fileName?: string) {
 | 
	
		
			
				|  |  | -        const url = unref(urlRef);
 | 
	
		
			
				|  |  | +        let url = '';
 | 
	
		
			
				|  |  | +        const wrapEl = unref(wrapRef);
 | 
	
		
			
				|  |  | +        if (wrapEl instanceof HTMLCanvasElement) {
 | 
	
		
			
				|  |  | +          url = wrapEl.toDataURL();
 | 
	
		
			
				|  |  | +        } else if (wrapEl instanceof HTMLImageElement) {
 | 
	
		
			
				|  |  | +          url = wrapEl.src;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (!url) return;
 | 
	
		
			
				|  |  |          downloadByUrl({
 | 
	
		
			
				|  |  |            url,
 |