Files
zyt/server/public/admin/assets/index-BdBwexoG.js
T
2026-06-05 17:22:29 +08:00

2 lines
5.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
var A=Object.defineProperty;var F=(e,r,s)=>r in e?A(e,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[r]=s;var U=(e,r,s)=>F(e,typeof r!="symbol"?r+"":r,s);import{a0 as M,a1 as N,V}from"./element-plus-Ds3qCU_G.js";import{u as j,e as K,p as _,R as b,i as w,_ as H}from"./index-CYLw0J2V.js";import{C as x}from"./cos-js-sdk-v5-DSMN0LUT.js";import{j as J,k as X}from"./file-C_xnWpAD.js";import{f as G,A as C,ak as E,I as P,a as z,aN as D,aq as Q,G as W,J as $,F as Y,ap as Z,H as ee}from"./@vue/runtime-core-C6bnekPw.js";import{n as L,q as re}from"./@vue/reactivity-DiY1c2vO.js";import{Q as ae}from"./@vue/shared-mAAVTE9n.js";const te=5*1024*1024,se=3;function le(e,r){const s=(r.name.split(".").pop()||"mp4").toLowerCase(),S=Date.now(),p=Math.random().toString(36).slice(2,10);return`${e}${S}-${p}.${s}`}async function ne(e){var o,d;const r=await J({type:e.type});if(r.fallback)throw((o=e.onFallback)==null?void 0:o.call(e,r.provider))??!1?new T(r.provider):new T(r.provider);if(!r.credentials||!r.bucket||!r.region||!r.key_prefix)throw new Error("STS 凭证返回缺失字段");if(r.max_size&&e.file.size>r.max_size){const m=Math.round(r.max_size/1024/1024);throw new Error(`视频体积超出上限(${m}MB`)}const s=r.credentials,S=r.expired_time??0,p=r.start_time??Math.floor(Date.now()/1e3),y=new x({getAuthorization(m,i){i({TmpSecretId:s.tmpSecretId,TmpSecretKey:s.tmpSecretKey,SecurityToken:s.sessionToken,StartTime:p,ExpiredTime:S})}}),h=le(r.key_prefix,e.file);await new Promise((m,i)=>{y.uploadFile({Bucket:r.bucket,Region:r.region,Key:h,Body:e.file,SliceSize:te,AsyncLimit:se,onProgress(f){if(!e.onProgress)return;const k=f.total||e.file.size;e.onProgress({percent:Math.min(99,Math.round((f.percent||0)*100)),loaded:f.loaded||0,total:k,speed:f.speed||0})}},f=>{if(f){i(f);return}m()})});const u=await X({type:e.type,key:h,name:e.file.name,size:e.file.size,content_type:e.file.type||"",cid:e.cid??0});return(d=e.onProgress)==null||d.call(e,{percent:100,loaded:e.file.size,total:e.file.size,speed:0}),u}class T extends Error{constructor(s){super(`COS 直传不可用,当前驱动: ${s}`);U(this,"provider");this.name="DirectUploadFallbackError",this.provider=s}}const ce=G({components:{},props:{type:{type:String,default:"image"},multiple:{type:Boolean,default:!0},limit:{type:Number,default:10},data:{type:Object,default:()=>({})},showProgress:{type:Boolean,default:!1},direct:{type:Boolean,default:!1}},emits:["change","error","success","allSuccess"],setup(e,{emit:r}){const s=j(),S=K(),p=re(),y=L(`${_.baseUrl}${_.urlPrefix}/upload/${e.type}`),h=C(()=>({token:s.token,version:S.config.version})),u=L(!1),o=L([]),d=C(()=>e.direct&&["video","voice"].includes(e.type)),m=()=>{u.value=!0};let i=0;const f=(a,n)=>{i++,i==o.value.length&&(i=0,o.value=[],r("allSuccess")),r("change",n),a.code==b.SUCCESS&&r("success",a),a.code==b.FAIL&&a.msg&&w.msgError(a.msg)},k=(a,n)=>{var l;i++,i==o.value.length&&(i=0,o.value=[],r("allSuccess")),w.msgError(`${n.name}文件上传失败`),(l=p.value)==null||l.abort(n),u.value=!1,r("change",n),r("error",n)},B=()=>{w.msgError(`超出上传上限${e.limit},请重新上传`)},R=()=>{o.value=[],u.value=!1},q=C(()=>{switch(e.type){case"image":return".jpg,.png,.gif,.jpeg,.ico";case"video":return".wmv,.avi,.mpg,.mpeg,.3gp,.mov,.mp4,.flv,.rmvb,.mkv";case"voice":return".mp3,.wav,.wma,.m4a,.aac,.amr";default:return"*"}}),I=async a=>{var n,l,v;u.value=!0;try{const t=await ne({file:a.file,type:e.type,cid:Number(((n=a.data)==null?void 0:n.cid)??0),onProgress(c){var g;(g=a.onProgress)==null||g.call(a,{percent:c.percent,loaded:c.loaded,total:c.total})}});(l=a.onSuccess)==null||l.call(a,{code:b.SUCCESS,msg:"ok",data:t})}catch(t){if(t instanceof T){w.msgWarning("当前存储不支持直传,已切换为普通上传"),await O(a);return}(v=a.onError)==null||v.call(a,t instanceof Error?t:new Error(String((t==null?void 0:t.message)??t)))}},O=a=>new Promise(n=>{const l=new XMLHttpRequest;l.open("POST",y.value),Object.entries(h.value).forEach(([t,c])=>l.setRequestHeader(t,String(c??""))),l.upload.onprogress=t=>{var g;if(!t.lengthComputable)return;const c=t.loaded/t.total*100;(g=a.onProgress)==null||g.call(a,{percent:c,loaded:t.loaded,total:t.total})},l.onload=()=>{var t,c;try{const g=JSON.parse(l.responseText);(t=a.onSuccess)==null||t.call(a,g)}catch{(c=a.onError)==null||c.call(a,new Error("上传响应解析失败"))}n()},l.onerror=()=>{var t;(t=a.onError)==null||t.call(a,new Error("网络错误")),n()};const v=new FormData;v.append("file",a.file),Object.entries(a.data||{}).forEach(([t,c])=>v.append(t,String(c))),l.send(v)});return{uploadRefs:p,action:y,headers:h,visible:u,fileList:o,useDirect:d,httpRequest:I,getAccept:q,handleProgress:m,handleSuccess:f,handleError:k,handleExceed:B,handleClose:R}}}),oe={class:"upload"},de={class:"file-list p-4"},ie={class:"flex-1"};function ue(e,r,s,S,p,y){const h=M,u=N,o=V;return E(),P("div",oe,[z(h,{"file-list":e.fileList,"onUpdate:fileList":r[0]||(r[0]=d=>e.fileList=d),ref:"uploadRefs",action:e.action,multiple:e.multiple,limit:e.limit,"show-file-list":!1,headers:e.headers,data:e.data,"http-request":e.useDirect?e.httpRequest:void 0,"on-progress":e.handleProgress,"on-success":e.handleSuccess,"on-exceed":e.handleExceed,"on-error":e.handleError,accept:e.getAccept},{default:D(()=>[Q(e.$slots,"default")]),_:3},8,["file-list","action","multiple","limit","headers","data","http-request","on-progress","on-success","on-exceed","on-error","accept"]),e.showProgress&&e.fileList.length?(E(),W(o,{key:0,modelValue:e.visible,"onUpdate:modelValue":r[1]||(r[1]=d=>e.visible=d),title:"上传进度","close-on-click-modal":!1,width:"500px",modal:!1,onClose:e.handleClose},{default:D(()=>[$("div",de,[(E(!0),P(Y,null,Z(e.fileList,(d,m)=>(E(),P("div",{key:m,class:"mb-5"},[$("div",null,ae(d.name),1),$("div",ie,[z(u,{percentage:parseInt(d.percentage)},null,8,["percentage"])])]))),128))])]),_:1},8,["modelValue","onClose"])):ee("",!0)])}const we=H(ce,[["render",ue]]);export{we as U};