mirror of
https://github.com/XiaoDaiGua-Ray/ray-template.git
synced 2025-06-10 01:39:22 +08:00
2 lines
3.1 KiB
JavaScript
2 lines
3.1 KiB
JavaScript
import{n as f,d as m,h as l,p as h}from"./index-f0e321ba.js";import{l as V}from"./awesome-qr@2.1.5-rc.0-423f5ed7.js";const b={loadingDescription:{type:String},watchText:{type:Boolean,default:!0},status:{type:String},errorDescription:{type:[String,Object],default:"二维码已过期"},errorActionDescription:{type:String,default:"重新加载"},text:{type:String,required:!0},size:{type:Number,default:160},margin:{type:Number,default:12},correctLevel:{type:Number,default:1,validator:t=>[0,1,2,3].includes(t)},maskPattern:{type:Number},version:{type:Number},components:{type:Object,default:()=>({data:{scale:1},timing:{scale:1,protectors:!1},alignment:{scale:1,protectors:!1},cornerAlignment:{scale:1,protectors:!0}})},colorDark:{type:String,default:"#000000"},colorLight:{type:String,default:"#ffffff"},autoColor:{type:Boolean,default:!0},backgroundImage:{type:String},backgroundDimming:{type:String,default:"rgba(0, 0, 0, 0)"},gifBackgroundURL:{type:String},gifBackground:{type:ArrayBuffer},whiteMargin:{type:Boolean,default:!0},logoImage:{type:String},logoScale:{type:Number,default:.4},logoMargin:{type:Number,default:6},logoCornerRadius:{type:Number,default:8},dotScale:{type:Number,default:1},onSuccess:{type:[Function,Array],default:null},onError:{type:[Function,Array],default:null},onReload:{type:[Function,Array],default:null}},N=t=>new Promise((i,s)=>{const e=new XMLHttpRequest;e.responseType="blob",e.onload=()=>{const o=new FileReader;o.onloadend=()=>{i(o.result)},o.onerror=n=>{s(n)},o.onabort=n=>{s(n)},o.readAsArrayBuffer(e.response)},e.open("GET",t),e.send()}),v=Vue.defineComponent({name:"RayQRcode",props:b,setup(t,i){const{expose:s}=i,e=Vue.ref(),o={opacitySpinning:"0.1"};let n;const p=async()=>{const{gifBackgroundURL:r}=t;if(r)try{n=await N(r)}catch(u){console.error(u)}},d=()=>{const{gifBackground:r,...u}=t;new V.AwesomeQR({...u,gifBackground:n??void 0}).draw().then(c=>{const{onSuccess:a}=t;a&&l(a,c),e.value=c}).catch(c=>{const{onError:a}=t;a&&l(a,c)})},g=()=>{if(i.slots.errorAction)return;const{onReload:r}=t;r&&l(r)},y=r=>{e.value&&f(e.value,"String")&&h(e.value,r||new Date().getTime()+".png")};return Vue.watchEffect(()=>{t.watchText&&Vue.nextTick().then(()=>{d()})}),s({downloadQRCode:y}),Vue.onMounted(async()=>{await p(),d()}),{qrcodeURL:e,spinOverrides:o,errorActionClick:g}},render(){return Vue.createVNode("div",{class:"ray-qrcode"},[Vue.createVNode(naive.NSpin,{show:this.status==="loading",themeOverrides:this.spinOverrides,description:this.loadingDescription},{default:()=>[Vue.createVNode("img",{src:this.qrcodeURL},null)]}),this.status==="error"?Vue.createVNode("div",{class:"ray-qrcode__error"},[Vue.createVNode("div",{class:"ray-qrcode__error-content"},[f(this.errorDescription,"String")?this.errorDescription:()=>this.errorDescription]),Vue.createVNode("div",{class:"ray-qrcode__error-btn",onClick:this.errorActionClick.bind(this)},[this.$slots.errorAction?this.$slots.errorAction():Vue.createVNode(Vue.Fragment,null,[Vue.createVNode(naive.NButton,{text:!0,color:"#ffffff"},{default:()=>this.errorActionDescription,icon:()=>Vue.createVNode(m,{name:"reload",size:"16",color:"#ffffff"},null)})])])]):null])}}),A="/ray-template/assets/ray-ab649d1c.svg";export{A as L,v as R};
|