mirror of
https://git-qiuchenly.yltfspace.com/QiuChenly/corepatch
synced 2025-11-25 05:40:27 +08:00
31 lines
4.2 KiB
JavaScript
31 lines
4.2 KiB
JavaScript
import{d as e,r as a,w as l,o as t,i as u,a as s,e as i,l as n,b as v,m as r,p as o,q as d,T as c,W as m,h as f,k as p}from"./CdD4XvnD.js"
|
|
import{b as g,_ as w,A as y,U as h,a as b}from"./BaSQ3xJt.js"
|
|
const k=["src"],L=["src"],R=["src"],_=["disabled"],z=["disabled"],I={key:1,class:"avatar-menu-item uploading"},U=b(e({__name:"AvatarUpload",props:{modelValue:{},size:{default:80},disabled:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(e,{emit:b}){m(e=>({v6174d950:U.size+"px"}))
|
|
const U=e,V=b,E=a(null),T=a(null),A=a(null),C=a(null),M=a(""),W=a(""),j=a(!1),x=a(!1),B=a(!1),H=a(null),O=()=>{var e
|
|
U.disabled||null==(e=E.value)||e.click()},P=async e=>{var a
|
|
const l=null==(a=e.target.files)?void 0:a[0]
|
|
if(!l)return
|
|
if(!l.type.startsWith("image/"))return void alert("请选择图片文件")
|
|
if(l.size>10485760)return void alert("图片大小不能超过10MB")
|
|
const t=new FileReader
|
|
t.onload=e=>{var a
|
|
M.value=null==(a=e.target)?void 0:a.result},t.readAsDataURL(l),C.value=l,await F(l)},F=async e=>{var a,l,t
|
|
x.value=!0,j.value=!1
|
|
try{const l=await y.uploadFile(h.APP_ICON,e)
|
|
if(!l.success||!(null==(a=l.data)?void 0:a.fileId))throw new Error(l.message||"上传失败")
|
|
{const e=l.data.fileId
|
|
V("update:modelValue",e),V("change",e)
|
|
try{const a=await y.getIcon(e)
|
|
W.value=a}catch(u){W.value=""}}}catch(s){const e=(null==(t=null==(l=s.response)?void 0:l.data)?void 0:t.message)||s.message||"上传失败"
|
|
alert(e),C.value=null,M.value="",W.value=""}finally{x.value=!1}},$=()=>{U.disabled||(C.value=null,M.value="",W.value="",j.value=!1,V("update:modelValue",""),V("change",""),E.value&&(E.value.value=""),B.value=!1)},q=()=>{},D=()=>{j.value=!0,M.value&&M.value.startsWith("blob:")&&URL.revokeObjectURL(M.value),M.value=""},N=()=>{W.value="",j.value=!1}
|
|
l(()=>U.modelValue,e=>{!e||M.value||x.value?e||(W.value="",j.value=!1):(async e=>{if(!e)return W.value="",void(j.value=!1)
|
|
if(!M.value&&!x.value)try{const a=await y.getIcon(e)
|
|
W.value=a,j.value=!0}catch(a){W.value="",j.value=!1}})(e)},{immediate:!0})
|
|
const G=()=>{H.value&&(clearTimeout(H.value),H.value=null),B.value=!0},J=e=>{const a=e.relatedTarget
|
|
a&&A.value&&A.value.contains(a)||(H.value&&clearTimeout(H.value),H.value=window.setTimeout(()=>{B.value=!1},200))},K=()=>{if(!B.value||!T.value||!A.value)return
|
|
const e=T.value.getBoundingClientRect(),a=A.value,l=a.offsetHeight
|
|
let t=e.right+12,u=e.top
|
|
t+52>window.innerWidth-20&&(t=e.left-52-12),u+l>window.innerHeight-20&&(u=window.innerHeight-l-20),t<20&&(t=20),u<20&&(u=20),a.style.left=`${t}px`,a.style.top=`${u}px`}
|
|
return l(B,e=>{e&&p(()=>{K()})}),t(()=>{window.addEventListener("scroll",K,!0),window.addEventListener("resize",K)}),u(()=>{window.removeEventListener("scroll",K,!0),window.removeEventListener("resize",K),H.value&&clearTimeout(H.value),M.value&&M.value.startsWith("blob:")&&URL.revokeObjectURL(M.value)}),(a,l)=>(f(),s("div",{class:"avatar-upload",onMouseenter:G,onMouseleave:J},[i("div",{ref_key:"avatarPreviewRef",ref:T,class:"avatar-preview"},[j.value&&W.value?(f(),s("img",{key:0,src:W.value,alt:"云端图标",class:"preview-image"},null,8,k)):M.value?(f(),s("img",{key:1,src:M.value,alt:"图标预览",class:"preview-image"},null,8,L)):(f(),n(g,{key:2,"avatar-id":e.modelValue,width:e.size,height:e.size,onLoad:q},null,8,["avatar-id","width","height"])),W.value&&!j.value?(f(),s("img",{key:3,src:W.value,alt:"云端图标",class:"cloud-image",onLoad:D,onError:N},null,40,R)):v("",!0)],512),i("input",{ref_key:"fileInputRef",ref:E,type:"file",accept:"image/*",onChange:P,class:"file-input",style:{display:"none"}},null,544),(f(),n(c,{to:"body"},[r(o,{name:"avatar-menu-fade"},{default:d(()=>[B.value?(f(),s("div",{key:0,ref_key:"menuRef",ref:A,class:"avatar-menu",onMouseenter:G,onMouseleave:J},[i("button",{type:"button",class:"avatar-menu-item",onClick:O,disabled:x.value,title:"更换"},[r(w,{icon:"fluent:image-edit-24-regular"})],8,_),C.value||e.modelValue?(f(),s("button",{key:0,type:"button",class:"avatar-menu-item danger",onClick:$,disabled:x.value,title:"清除"},[r(w,{icon:"fluent:delete-24-regular"})],8,z)):v("",!0),x.value?(f(),s("div",I,[...l[0]||(l[0]=[i("div",{class:"spinner-small"},null,-1)])])):v("",!0)],544)):v("",!0)]),_:1})]))],32))}}),[["__scopeId","data-v-8cef3395"]])
|
|
export{U as A}
|