mira-app-server
Version:
Mira Server - standalone server application using mira-app-core
2 lines (1 loc) • 36.7 kB
JavaScript
import{aJ as me,cR as fe,c8 as _,al as R,N as Ve,B as De,a1 as pe,ax as v,aH as n,dq as u,as as l,cr as i,at as Q,aG as A,av as N,dt as $,bL as W,x as j,cb as q,dr as Me,dh as Re,bZ as p,aK as Be,z as ce,d2 as Ie,cW as Ee,bV as Oe,db as Pe,ce as Ne}from"./index-OOzZz4T6.js";import{Q as He}from"./MultiTabFileUpload.vue_vue_type_style_index_0_scoped_d6c008b6_lang-7H6xCDli.js";import{c as je,b as qe,e as We,d as Qe,S as Ge}from"./SelectValue-BTic8Ggd.js";import{b as Xe,d as Je,c as Ze,T as Ke}from"./TabsTrigger-BT8zVtVt.js";import{B as Ye}from"./index--EpjhOjd.js";import{C as $e}from"./Checkbox-BfEXYDtx.js";import{a as el,R as ll}from"./RadioGroupItem-nNNjlV9J.js";import{b as tl,c as ol,e as al,a as il,d as sl,T as rl}from"./TableHeader-B9xaXLo9.js";import{f as nl,e as dl,d as ul,T as cl}from"./TooltipTrigger-BN8IaDgz.js";import"./Collection-xoV-DHwv.js";import"./usePrimitiveElement-CCN0lZVt.js";const ml=me({__name:"MultiTabFileUpload",props:{accept:{type:String,required:!1,default:"*"},maxFiles:{type:Number,required:!1,default:10},autoUpload:{type:Boolean,required:!1,default:!1},uploadedFilesList:{type:Array,required:!1,default:()=>[]},isLoading:{type:Boolean,required:!1,default:!1},showUploadedFiles:{type:Boolean,required:!1,default:!0}},emits:["files-selected","upload-start","upload-progress","upload-complete","upload-error","files-uploaded","delete-file","clear-all-files","refresh-files","sort-change"],setup(a,{expose:s,emit:T}){const{t:e}=fe(),U=a,F=T,o=_("upload-area"),h=_(!1),z=_(),x=_([]),y=_([]),k=_([]),M=_(""),B=_(!1),L=_([]),w=_("uploadedAt"),P=_("desc"),V=t=>{w.value===t?P.value=P.value==="asc"?"desc":"asc":(w.value=t,P.value="asc"),F("sort-change",w.value,P.value)},G=t=>{L.value.indexOf(t)===-1?L.value=[...L.value,t]:L.value=L.value.filter(c=>c!==t)},Z=t=>{t===!0?L.value=ie.value.map(r=>r.id):L.value=[]},m=_([]),f=_(""),b=_([]),I=R(()=>[{value:"image",label:e("commonUi.multiTabFileUpload.filterTypeImage")},{value:"video",label:e("commonUi.multiTabFileUpload.filterTypeVideo")},{value:"audio",label:e("commonUi.multiTabFileUpload.filterTypeAudio")},{value:"document",label:e("commonUi.multiTabFileUpload.filterTypeDocument")},{value:"archive",label:e("commonUi.multiTabFileUpload.filterTypeArchive")},{value:"unknown",label:e("commonUi.multiTabFileUpload.filterTypeOther")}]),O=R(()=>[{value:"",label:e("commonUi.multiTabFileUpload.sizeAll")},{value:"small",label:e("commonUi.multiTabFileUpload.sizeSmall")},{value:"medium",label:e("commonUi.multiTabFileUpload.sizeMedium")},{value:"large",label:e("commonUi.multiTabFileUpload.sizeLarge")},{value:"xlarge",label:e("commonUi.multiTabFileUpload.sizeXlarge")}]),H=R(()=>[{value:"",label:e("commonUi.multiTabFileUpload.timeAll")},{value:"today",label:e("commonUi.multiTabFileUpload.timeToday")},{value:"week",label:e("commonUi.multiTabFileUpload.timeWeek")},{value:"month",label:e("commonUi.multiTabFileUpload.timeMonth")},{value:"year",label:e("commonUi.multiTabFileUpload.timeYear")}]),ee=t=>{o.value=String(t)},le=()=>{z.value?.click()},te=t=>{const r=t.target;r.files&&d(Array.from(r.files)),r.value=""},oe=t=>{h.value=!1,t.dataTransfer?.files&&d(Array.from(t.dataTransfer.files))},K=()=>{h.value=!0},Y=()=>{h.value=!1},d=t=>{const r=t.filter(g=>U.accept!=="*"&&!re(g)?(console.warn(`文件 ${g.name} 类型不支持`),!1):x.value.some(D=>D.name===g.name&&D.size===g.size)?(console.warn(`文件 ${g.name} 已存在`),!1):!0);if(x.value.length+r.length>U.maxFiles){const g=U.maxFiles-x.value.length;r.splice(g),console.warn(`最多只能选择 ${U.maxFiles} 个文件`)}x.value.push(...r),F("files-selected",x.value),U.autoUpload&&r.length>0&&C()},S=t=>{x.value.splice(t,1)},C=()=>{if(x.value.length===0)return;const t=x.value.map(r=>({file:r,progress:0,status:e("commonUi.multiTabFileUpload.statusPreparing"),id:Date.now()+Math.random().toString(36).substr(2,9)}));y.value.push(...t),x.value=[],o.value="uploading",F("upload-start",t.map(r=>r.file)),t.forEach(r=>{E(r)})},E=async t=>{try{t.status=e("commonUi.multiTabFileUpload.statusUploading"),F("upload-progress",t),await new Promise(g=>{const D=setInterval(()=>{t.progress+=Math.random()*20,t.progress>=100&&(t.progress=100,clearInterval(D),g()),F("upload-progress",t)},200)}),t.status=e("commonUi.multiTabFileUpload.statusCompleted"),t.uploadedAt=new Date;const c=y.value.findIndex(g=>g.id===t.id);c!==-1&&(y.value.splice(c,1),k.value.unshift(t)),F("upload-complete",t)}catch(r){t.status=e("commonUi.multiTabFileUpload.statusFailed"),F("upload-error",t,r)}},se=t=>{y.value[t]&&y.value.splice(t,1)},X=t=>{const r=URL.createObjectURL(t.file),c=document.createElement("a");c.href=r,c.download=t.file.name,c.click(),URL.revokeObjectURL(r)},ae=t=>{k.value.splice(t,1)},ve=()=>{k.value=[]},re=t=>U.accept==="*"?!0:U.accept.split(",").map(c=>c.trim()).some(c=>{if(c.startsWith("."))return t.name.toLowerCase().endsWith(c.toLowerCase());if(c.includes("/*")){const g=c.split("/")[0];return t.type.startsWith(g)}return t.type===c}),ge=t=>{const r=t.type,c=t.name.toLowerCase();return r.startsWith("image/")?"pi pi-image text-primary":r.startsWith("video/")?"pi pi-video text-purple-500":r.startsWith("audio/")?"pi pi-volume-up text-green-500":r==="application/pdf"?"pi pi-file-pdf text-destructive":r.includes("word")||c.endsWith(".doc")||c.endsWith(".docx")?"pi pi-file-word text-primary":r.includes("sheet")||c.endsWith(".xls")||c.endsWith(".xlsx")?"pi pi-file-excel text-green-600":r.includes("zip")||r.includes("rar")||r.includes("archive")?"pi pi-file-archive text-yellow-500":"pi pi-file text-muted-foreground"},he=t=>{if(t===0)return"0 B";const r=1024,c=["B","KB","MB","GB"],g=Math.floor(Math.log(t)/Math.log(r));return parseFloat((t/Math.pow(r,g)).toFixed(2))+" "+c[g]},be=t=>t.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),J=t=>t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":t.includes("pdf")||t.includes("document")||t.includes("text")?"document":t.includes("zip")||t.includes("rar")||t.includes("tar")?"archive":"unknown",Ue=R(()=>{const t=[];return m.value.length>0&&t.push(e("commonUi.multiTabFileUpload.activeFilterType")),f.value&&t.push(e("commonUi.multiTabFileUpload.activeFilterSize")),b.value.length>0&&t.push(e("commonUi.multiTabFileUpload.activeFilterTime")),t}),Fe=t=>U.uploadedFilesList.filter(r=>J(r.mimeType)===t).length,ie=R(()=>{let t=U.uploadedFilesList;if(M.value){const r=M.value.toLowerCase();t=t.filter(c=>c.name.toLowerCase().includes(r)||c.mimeType?.toLowerCase().includes(r))}if(m.value.length>0&&(t=t.filter(r=>m.value.includes(J(r.mimeType)))),f.value&&(t=t.filter(r=>{const c=r.size;switch(f.value){case"small":return c<1024*1024;case"medium":return c>=1024*1024&&c<10*1024*1024;case"large":return c>=10*1024*1024&&c<100*1024*1024;case"xlarge":return c>=100*1024*1024;default:return!0}})),b.value.length>0){const r=new Date;t=t.filter(c=>{const g=new Date(c.uploadedAt);return b.value.some(D=>{switch(D){case"today":return g.toDateString()===r.toDateString();case"week":const Le=new Date(r.getTime()-10080*60*1e3);return g>=Le;case"month":const Ae=new Date(r.getFullYear(),r.getMonth()-1,r.getDate());return g>=Ae;case"year":const ze=new Date(r.getFullYear()-1,r.getMonth(),r.getDate());return g>=ze;default:return!0}})})}return t.sort((r,c)=>{let g=r[w.value],D=c[w.value];return w.value==="size"?(g=Number(g)||0,D=Number(D)||0):w.value==="uploadedAt"?(g=new Date(g).getTime(),D=new Date(D).getTime()):(g=String(g).toLowerCase(),D=String(D).toLowerCase()),P.value==="asc"?g>D?1:-1:g<D?1:-1}),t}),_e=R(()=>ie.value.length),Te=t=>{const r=J(t),c={image:"image",video:"videocam",audio:"audiotrack",document:"description",archive:"archive",unknown:"insert_drive_file"};return c[r]||c.unknown},ye=t=>{const r=J(t),c={image:"text-green-500",video:"text-primary",audio:"text-purple-500",document:"text-primary",archive:"text-yellow-500",unknown:"text-muted-foreground"};return c[r]||c.unknown},xe=t=>new Date(t).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),we=t=>{F("delete-file",t)},Se=()=>{F("clear-all-files")},Ce=()=>{F("refresh-files")},ke=()=>{m.value=[],f.value="",b.value=[],B.value=!1},ne=()=>{x.value=[],y.value=[],k.value=[],o.value="upload-area"},de=()=>({selected:x.value.length,uploading:y.value.length,uploaded:k.value.length,total:x.value.length+y.value.length+k.value.length});s({clearAll:ne,getUploadStats:de,startUpload:C});const ue={t:e,props:U,emit:F,currentTabValue:o,isDragOver:h,fileInput:z,selectedFiles:x,uploadingFiles:y,uploadedFiles:k,searchQuery:M,showFilterMenu:B,selectedUploadedFiles:L,sortField:w,sortOrder:P,toggleSort:V,toggleSelectFile:G,toggleSelectAll:Z,selectedFileTypes:m,selectedFileSize:f,selectedUploadTime:b,fileTypes:I,fileSizes:O,uploadTimes:H,updateCurrentTab:ee,triggerFileSelect:le,handleFileSelect:te,handleDrop:oe,handleDragOver:K,handleDragLeave:Y,addFiles:d,removeSelectedFile:S,startUpload:C,uploadFile:E,cancelUpload:se,downloadFile:X,removeUploadedFile:ae,clearUploadedFiles:ve,isFileTypeAccepted:re,getFileIcon:ge,formatFileSize:he,formatUploadTime:be,getFileType:J,activeFilters:Ue,getFileCountByType:Fe,filteredUploadedFiles:ie,totalUploadedFiles:_e,getFileIconForMime:Te,getFileIconClass:ye,formatDate:xe,handleDeleteFile:we,handleClearAllFiles:Se,handleRefreshFiles:Ce,clearFilters:ke,clearAll:ne,getUploadStats:de,get Tabs(){return Ke},get TabsList(){return Ze},get TabsTrigger(){return Je},get TabsContent(){return Xe},get Button(){return De},get Progress(){return Ve},get Badge(){return Ye},get Checkbox(){return $e},get RadioGroup(){return ll},get RadioGroupItem(){return el},get Table(){return rl},get TableHeader(){return sl},get TableBody(){return il},get TableRow(){return al},get TableHead(){return ol},get TableCell(){return tl},get Tooltip(){return cl},get TooltipContent(){return ul},get TooltipProvider(){return dl},get TooltipTrigger(){return nl}};return Object.defineProperty(ue,"__isScriptSetup",{enumerable:!1,value:!0}),ue}}),fl={class:"w-full min-h-[400px]"},pl={key:0,class:"pi pi-spin pi-spinner"},vl={key:1,class:"pi pi-clock"},gl={class:"upload-area p-4"},hl={class:"flex flex-col items-center justify-center"},bl={class:"text-xl font-semibold mb-2"},Ul={class:"text-muted-foreground mb-4"},Fl=["accept"],_l={key:0,class:"selected-files mt-4"},Tl={class:"flex items-center justify-between mb-3"},yl={class:"font-semibold"},xl={class:"file-list space-y-2"},wl={class:"file-info flex items-center"},Sl={class:"font-medium"},Cl={class:"text-sm text-muted-foreground"},kl={class:"uploading-area p-4"},Ll={key:0,class:"opacity-80 text-center py-8"},Al={class:"text-muted-foreground"},zl={key:1,class:"uploading-list space-y-3"},Vl={class:"flex items-center justify-between mb-2"},Dl={class:"file-info flex items-center"},Ml={class:"font-medium"},Rl={class:"text-sm text-muted-foreground"},Bl={class:"mt-2"},Il={class:"flex justify-between text-sm mb-1"},El={key:0,class:"uploaded-area"},Ol={class:"flex justify-between items-center mb-4 p-4 pb-0"},Pl={class:"flex items-center"},Nl={class:"text-lg font-semibold text-foreground mr-2"},Hl={class:"text-sm text-muted-foreground bg-muted px-2 py-0.5 rounded-full"},jl={class:"flex items-center space-x-4"},ql={class:"relative"},Wl=["placeholder"],Ql={class:"relative"},Gl={key:0,class:"bg-primary text-white text-xs rounded-full px-2 py-0.5 ml-1"},Xl={key:0,class:"absolute right-0 top-full mt-2 w-64 bg-white border border-border rounded-lg shadow-lg z-10"},Jl={class:"p-4"},Zl={class:"flex justify-between items-center mb-3"},Kl={class:"font-medium text-foreground"},Yl={class:"font-medium text-foreground mb-3 text-sm"},$l={class:"space-y-2"},et={class:"text-sm text-foreground"},lt={class:"text-xs text-muted-foreground ml-auto"},tt={class:"font-medium text-foreground mb-3 text-sm"},ot={class:"text-sm text-foreground"},at={class:"font-medium text-foreground mb-3 text-sm"},it={class:"space-y-2"},st={class:"text-sm text-foreground"},rt={class:"flex justify-between mt-4 pt-4 border-t border-border"},nt={class:"flex justify-between items-center mb-4 px-4"},dt={class:"text-muted-foreground"},ut={class:"flex items-center space-x-2"},ct=["disabled"],mt={class:"px-4 pb-4"},ft={class:"rounded-lg border border-border bg-card overflow-hidden"},pt={key:0,class:"p-8 text-center text-muted-foreground"},vt={class:"flex items-center justify-center"},gt={key:0,class:"material-icons text-xs align-middle"},ht={key:0,class:"material-icons text-xs align-middle"},bt={key:0,class:"material-icons text-xs align-middle"},Ut={class:"flex flex-col items-center"},Ft={class:"flex items-center"},_t={class:"font-medium text-foreground"},Tt={class:"text-sm text-muted-foreground"},yt={class:"flex items-center space-x-2"},xt=["onClick","title"],wt={key:1,class:"uploaded-area p-4"},St={key:0,class:"opacity-80 text-center py-8"},Ct={class:"text-muted-foreground"},kt={key:1},Lt={class:"flex items-center justify-between mb-4"},At={class:"font-semibold"},zt={class:"uploaded-list space-y-2"},Vt={class:"file-info flex items-center"},Dt={class:"font-medium"},Mt={class:"text-sm text-muted-foreground"},Rt={class:"actions flex items-center space-x-2"};function Bt(a,s,T,e,U,F){return p(),v("div",fl,[n(e.Tabs,{"model-value":e.currentTabValue,"onUpdate:modelValue":e.updateCurrentTab,class:"upload-tabs h-full bg-white rounded-xl shadow-sm overflow-hidden"},{default:u(()=>[n(e.TabsList,null,{default:u(()=>[n(e.TabsTrigger,{value:"upload-area",class:"flex items-center gap-2"},{default:u(()=>[s[7]||(s[7]=l("i",{class:"pi pi-cloud-upload"},null,-1)),l("span",null,i(a.$t("commonUi.multiTabFileUpload.tabUploadArea")),1)]),_:1}),n(e.TabsTrigger,{value:"uploading",class:"flex items-center gap-2"},{default:u(()=>[e.uploadingFiles.length>0?(p(),v("i",pl)):(p(),v("i",vl)),l("span",null,i(a.$t("commonUi.multiTabFileUpload.tabUploading")),1),e.uploadingFiles.length>0?(p(),Q(e.Badge,{key:2,variant:"outline"},{default:u(()=>[A(i(e.uploadingFiles.length),1)]),_:1})):N("",!0)]),_:1}),n(e.TabsTrigger,{value:"uploaded",class:"flex items-center gap-2"},{default:u(()=>[s[8]||(s[8]=l("i",{class:"pi pi-check-circle"},null,-1)),l("span",null,i(a.$t("commonUi.multiTabFileUpload.tabUploaded")),1),e.uploadedFiles.length>0?(p(),Q(e.Badge,{key:0,variant:"secondary"},{default:u(()=>[A(i(e.uploadedFiles.length),1)]),_:1})):N("",!0)]),_:1})]),_:1}),l("div",null,[n(e.TabsContent,{value:"upload-area"},{default:u(()=>[l("div",gl,[l("div",{class:W(["dropzone",{"drag-over":e.isDragOver}]),onDrop:$(e.handleDrop,["prevent"]),onDragover:$(e.handleDragOver,["prevent"]),onDragleave:$(e.handleDragLeave,["prevent"]),onClick:e.triggerFileSelect},[l("div",hl,[s[10]||(s[10]=l("i",{class:"pi pi-cloud-upload text-6xl text-primary mb-4"},null,-1)),l("h3",bl,i(a.$t("commonUi.multiTabFileUpload.dragHere")),1),l("p",Ul,i(a.$t("commonUi.multiTabFileUpload.orClickSelect")),1),n(e.Button,{variant:"outline",onClick:$(e.triggerFileSelect,["stop"])},{default:u(()=>[s[9]||(s[9]=l("i",{class:"pi pi-plus mr-2"},null,-1)),A(" "+i(a.$t("commonUi.multiTabFileUpload.selectFiles")),1)]),_:1})])],34),l("input",{ref:"fileInput",type:"file",multiple:"",accept:T.accept,class:"hidden",onChange:e.handleFileSelect},null,40,Fl),e.selectedFiles.length>0?(p(),v("div",_l,[l("div",Tl,[l("h4",yl,i(a.$t("commonUi.multiTabFileUpload.selectedFiles",{count:e.selectedFiles.length})),1),n(e.Button,{disabled:e.selectedFiles.length===0,onClick:e.startUpload},{default:u(()=>[s[11]||(s[11]=l("i",{class:"pi pi-upload mr-2"},null,-1)),A(" "+i(a.$t("commonUi.multiTabFileUpload.startUpload")),1)]),_:1},8,["disabled"])]),l("div",xl,[(p(!0),v(j,null,q(e.selectedFiles,(o,h)=>(p(),v("div",{key:h,class:"file-item p-3 border border-border rounded-lg flex items-center justify-between"},[l("div",wl,[l("i",{class:W([e.getFileIcon(o),"text-2xl mr-3"])},null,2),l("div",null,[l("div",Sl,i(o.name),1),l("div",Cl,i(e.formatFileSize(o.size)),1)])]),n(e.Button,{variant:"ghost",class:"rounded-full",onClick:z=>e.removeSelectedFile(h)},{default:u(()=>[...s[12]||(s[12]=[l("i",{class:"pi pi-times"},null,-1)])]),_:2},1032,["onClick"])]))),128))])])):N("",!0)])]),_:1}),n(e.TabsContent,{value:"uploading"},{default:u(()=>[l("div",kl,[e.uploadingFiles.length===0?(p(),v("div",Ll,[s[13]||(s[13]=l("i",{class:"pi pi-info-circle text-4xl text-muted-foreground mb-4"},null,-1)),l("p",Al,i(a.$t("commonUi.multiTabFileUpload.noUploading")),1)])):(p(),v("div",zl,[(p(!0),v(j,null,q(e.uploadingFiles,(o,h)=>(p(),v("div",{key:h,class:"upload-item p-4 border border-border rounded-lg"},[l("div",Vl,[l("div",Dl,[l("i",{class:W([e.getFileIcon(o.file),"text-2xl mr-3"])},null,2),l("div",null,[l("div",Ml,i(o.file.name),1),l("div",Rl,i(e.formatFileSize(o.file.size)),1)])]),n(e.Button,{variant:"destructive",class:"rounded-full",onClick:z=>e.cancelUpload(h)},{default:u(()=>[...s[14]||(s[14]=[l("i",{class:"pi pi-times"},null,-1)])]),_:2},1032,["onClick"])]),l("div",Bl,[l("div",Il,[l("span",null,i(o.status),1),l("span",null,i(Math.round(o.progress))+"%",1)]),n(e.Progress,{"model-value":o.progress,class:"h-2"},null,8,["model-value"])])]))),128))]))])]),_:1}),n(e.TabsContent,{value:"uploaded"},{default:u(()=>[T.showUploadedFiles?(p(),v("div",El,[l("div",Ol,[l("div",Pl,[l("h2",Nl,i(a.$t("commonUi.multiTabFileUpload.uploadedFiles")),1),l("span",Hl,i(a.$t("commonUi.multiTabFileUpload.fileCount",{count:e.totalUploadedFiles})),1)]),l("div",jl,[l("div",ql,[Me(l("input",{"onUpdate:modelValue":s[0]||(s[0]=o=>e.searchQuery=o),class:"pl-10 pr-4 py-2 border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-primary",placeholder:a.$t("commonUi.multiTabFileUpload.searchFiles"),type:"text"},null,8,Wl),[[Re,e.searchQuery]]),s[15]||(s[15]=l("span",{class:"material-icons absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"},"search",-1))]),l("div",Ql,[l("button",{onClick:s[1]||(s[1]=o=>e.showFilterMenu=!e.showFilterMenu),class:"flex items-center space-x-2 px-4 py-2 border border-border rounded-lg text-foreground hover:bg-muted transition-colors"},[s[16]||(s[16]=l("span",{class:"material-icons"},"filter_list",-1)),l("span",null,i(a.$t("commonUi.multiTabFileUpload.filter")),1),e.activeFilters.length>0?(p(),v("span",Gl,i(e.activeFilters.length),1)):N("",!0)]),e.showFilterMenu?(p(),v("div",Xl,[l("div",Jl,[l("div",Zl,[l("h3",Kl,i(a.$t("commonUi.multiTabFileUpload.filters")),1),l("button",{onClick:e.clearFilters,class:"text-xs text-muted-foreground hover:text-foreground underline"},i(a.$t("commonUi.multiTabFileUpload.clearAll")),1)]),l("h4",Yl,i(a.$t("commonUi.multiTabFileUpload.fileType")),1),l("div",$l,[(p(!0),v(j,null,q(e.fileTypes,o=>(p(),v("label",{key:o.value,class:"flex items-center cursor-pointer"},[n(e.Checkbox,{checked:e.selectedFileTypes.includes(o.value),"onUpdate:checked":h=>{h?e.selectedFileTypes.push(o.value):e.selectedFileTypes=e.selectedFileTypes.filter(z=>z!==o.value)},class:"mr-2"},null,8,["checked","onUpdate:checked"]),l("span",et,i(o.label),1),l("span",lt,"("+i(e.getFileCountByType(o.value))+")",1)]))),128))]),s[17]||(s[17]=l("hr",{class:"my-4"},null,-1)),l("h4",tt,i(a.$t("commonUi.multiTabFileUpload.fileSize")),1),n(e.RadioGroup,{"model-value":e.selectedFileSize,"onUpdate:modelValue":s[2]||(s[2]=o=>e.selectedFileSize=String(o)),class:"space-y-2"},{default:u(()=>[(p(!0),v(j,null,q(e.fileSizes,o=>(p(),v("div",{key:o.value,class:"flex items-center"},[n(e.RadioGroupItem,{value:o.value,class:"mr-2"},null,8,["value"]),l("span",ot,i(o.label),1)]))),128))]),_:1},8,["model-value"]),s[18]||(s[18]=l("hr",{class:"my-4"},null,-1)),l("h4",at,i(a.$t("commonUi.multiTabFileUpload.uploadTime")),1),l("div",it,[(p(!0),v(j,null,q(e.uploadTimes,o=>(p(),v("label",{key:o.value,class:"flex items-center cursor-pointer"},[n(e.Checkbox,{checked:e.selectedUploadTime.includes(o.value),"onUpdate:checked":h=>{h?e.selectedUploadTime.push(o.value):e.selectedUploadTime=e.selectedUploadTime.filter(z=>z!==o.value)},class:"mr-2"},null,8,["checked","onUpdate:checked"]),l("span",st,i(o.label),1)]))),128))]),l("div",rt,[l("button",{onClick:e.clearFilters,class:"text-sm text-muted-foreground hover:text-foreground"},i(a.$t("commonUi.multiTabFileUpload.clearFilter")),1),l("button",{onClick:s[3]||(s[3]=o=>e.showFilterMenu=!1),class:"text-sm bg-primary text-white px-3 py-1 rounded hover:bg-primary"},i(a.$t("commonUi.multiTabFileUpload.apply")),1)])])])):N("",!0)])])]),l("div",nt,[l("p",dt,i(a.$t("commonUi.multiTabFileUpload.manageHint")),1),l("div",ut,[l("button",{onClick:e.handleClearAllFiles,class:"flex items-center space-x-2 px-3 py-1.5 border border-border rounded-lg text-foreground hover:bg-muted text-sm transition-colors"},[s[19]||(s[19]=l("span",{class:"material-icons text-sm"},"delete_sweep",-1)),l("span",null,i(a.$t("commonUi.multiTabFileUpload.clearAllFiles")),1)]),l("button",{onClick:e.handleRefreshFiles,disabled:T.isLoading,class:"flex items-center space-x-2 px-3 py-1.5 border border-border rounded-lg text-foreground hover:bg-muted text-sm transition-colors disabled:opacity-50"},[l("span",{class:W(["material-icons text-sm",{"animate-spin":T.isLoading}])},"refresh",2),l("span",null,i(a.$t("commonUi.multiTabFileUpload.refresh")),1)],8,ct)])]),l("div",mt,[l("div",ft,[T.isLoading?(p(),v("div",pt,[l("div",vt,[s[20]||(s[20]=l("span",{class:"material-icons animate-spin mr-2"},"refresh",-1)),A(" "+i(a.$t("commonUi.multiTabFileUpload.loading")),1)])])):(p(),Q(e.Table,{key:1},{default:u(()=>[n(e.TableHeader,null,{default:u(()=>[n(e.TableRow,null,{default:u(()=>[n(e.TableHead,{class:"w-12"},{default:u(()=>[n(e.Checkbox,{"model-value":e.filteredUploadedFiles.length>0&&e.selectedUploadedFiles.length===e.filteredUploadedFiles.length,"onUpdate:modelValue":e.toggleSelectAll},null,8,["model-value"])]),_:1}),n(e.TableHead,{class:"cursor-pointer select-none",onClick:s[4]||(s[4]=o=>e.toggleSort("name"))},{default:u(()=>[A(i(a.$t("commonUi.multiTabFileUpload.fileName"))+" ",1),e.sortField==="name"?(p(),v("span",gt,i(e.sortOrder==="asc"?"arrow_upward":"arrow_downward"),1)):N("",!0)]),_:1}),n(e.TableHead,{class:"cursor-pointer select-none",onClick:s[5]||(s[5]=o=>e.toggleSort("size"))},{default:u(()=>[A(i(a.$t("commonUi.multiTabFileUpload.fileSizeCol"))+" ",1),e.sortField==="size"?(p(),v("span",ht,i(e.sortOrder==="asc"?"arrow_upward":"arrow_downward"),1)):N("",!0)]),_:1}),n(e.TableHead,{class:"cursor-pointer select-none",onClick:s[6]||(s[6]=o=>e.toggleSort("uploadedAt"))},{default:u(()=>[A(i(a.$t("commonUi.multiTabFileUpload.uploadTimeCol"))+" ",1),e.sortField==="uploadedAt"?(p(),v("span",bt,i(e.sortOrder==="asc"?"arrow_upward":"arrow_downward"),1)):N("",!0)]),_:1}),n(e.TableHead,null,{default:u(()=>[A(i(a.$t("commonUi.multiTabFileUpload.operation")),1)]),_:1})]),_:1})]),_:1}),n(e.TableBody,null,{default:u(()=>[e.filteredUploadedFiles.length===0?(p(),Q(e.TableRow,{key:0},{default:u(()=>[n(e.TableCell,{colspan:5,class:"p-8 text-center text-muted-foreground"},{default:u(()=>[l("div",Ut,[s[21]||(s[21]=l("span",{class:"material-icons text-4xl text-muted-foreground/50 mb-2"},"folder_open",-1)),l("p",null,i(e.searchQuery?a.$t("commonUi.multiTabFileUpload.noMatch"):a.$t("commonUi.multiTabFileUpload.noFiles")),1)])]),_:1})]),_:1})):N("",!0),(p(!0),v(j,null,q(e.filteredUploadedFiles,o=>(p(),Q(e.TableRow,{key:o.id,"data-state":e.selectedUploadedFiles.includes(o.id)?"selected":void 0},{default:u(()=>[n(e.TableCell,null,{default:u(()=>[n(e.Checkbox,{"model-value":e.selectedUploadedFiles.includes(o.id),"onUpdate:modelValue":h=>e.toggleSelectFile(o.id)},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),n(e.TableCell,null,{default:u(()=>[l("div",Ft,[l("span",{class:W(["material-icons mr-3",e.getFileIconClass(o.mimeType)])},i(e.getFileIconForMime(o.mimeType)),3),l("div",null,[l("p",_t,i(o.name),1),l("p",Tt,i(o.mimeType),1)])])]),_:2},1024),n(e.TableCell,null,{default:u(()=>[A(i(e.formatFileSize(o.size)),1)]),_:2},1024),n(e.TableCell,null,{default:u(()=>[A(i(e.formatDate(o.uploadedAt.toISOString())),1)]),_:2},1024),n(e.TableCell,null,{default:u(()=>[l("div",yt,[l("button",{onClick:h=>e.handleDeleteFile(o),class:"text-destructive hover:text-destructive/80 transition-colors",title:a.$t("commonUi.multiTabFileUpload.delete")},[...s[22]||(s[22]=[l("span",{class:"material-icons"},"delete",-1)])],8,xt)])]),_:2},1024)]),_:2},1032,["data-state"]))),128))]),_:1})]),_:1}))])])])):(p(),v("div",wt,[e.uploadedFiles.length===0?(p(),v("div",St,[s[23]||(s[23]=l("i",{class:"pi pi-check-circle text-4xl text-muted-foreground mb-4"},null,-1)),l("p",Ct,i(a.$t("commonUi.multiTabFileUpload.noUploaded")),1)])):(p(),v("div",kt,[l("div",Lt,[l("h4",At,i(a.$t("commonUi.multiTabFileUpload.uploadedFilesCount",{count:e.uploadedFiles.length})),1),n(e.Button,{variant:"destructive",onClick:e.clearUploadedFiles},{default:u(()=>[s[24]||(s[24]=l("i",{class:"pi pi-trash mr-2"},null,-1)),A(" "+i(a.$t("commonUi.multiTabFileUpload.clearList")),1)]),_:1})]),l("div",zt,[(p(!0),v(j,null,q(e.uploadedFiles,(o,h)=>(p(),v("div",{key:h,class:"uploaded-item p-3 border border-green-200 bg-green-50 rounded-lg flex items-center justify-between"},[l("div",Vt,[l("i",{class:W([e.getFileIcon(o.file),"text-2xl mr-3 text-green-600"])},null,2),l("div",null,[l("div",Dt,i(o.file.name),1),l("div",Mt,i(e.formatFileSize(o.file.size))+" • "+i(a.$t("commonUi.multiTabFileUpload.uploadedAt",{time:e.formatUploadTime(o.uploadedAt??new Date)})),1)])]),l("div",Rt,[n(e.TooltipProvider,null,{default:u(()=>[n(e.Tooltip,null,{default:u(()=>[n(e.TooltipTrigger,{"as-child":""},{default:u(()=>[n(e.Button,{variant:"ghost",class:"rounded-full",onClick:z=>e.downloadFile(o)},{default:u(()=>[...s[25]||(s[25]=[l("i",{class:"pi pi-download"},null,-1)])]),_:2},1032,["onClick"])]),_:2},1024),n(e.TooltipContent,null,{default:u(()=>[A(i(a.$t("commonUi.multiTabFileUpload.download")),1)]),_:1})]),_:2},1024)]),_:2},1024),n(e.TooltipProvider,null,{default:u(()=>[n(e.Tooltip,null,{default:u(()=>[n(e.TooltipTrigger,{"as-child":""},{default:u(()=>[n(e.Button,{variant:"destructive",class:"rounded-full",onClick:z=>e.removeUploadedFile(h)},{default:u(()=>[...s[26]||(s[26]=[l("i",{class:"pi pi-times"},null,-1)])]),_:2},1032,["onClick"])]),_:2},1024),n(e.TooltipContent,null,{default:u(()=>[A(i(a.$t("commonUi.multiTabFileUpload.delete")),1)]),_:1})]),_:2},1024)]),_:2},1024)])]))),128))])]))]))]),_:1})])]),_:1},8,["model-value"])])}const It=pe(ml,[["render",Bt],["__scopeId","data-v-d6c008b6"],["__file","D:/mira_typescript/packages/mira-client/src/renderer/components/common/MultiTabFileUpload.vue"]]),Et=Be("uploadHistory",()=>{const a=_([]),s=_(!1),T=_(null),e=R(()=>a.value.length),U=R(()=>a.value.filter(m=>m.status==="success")),F=R(()=>a.value.filter(m=>m.status==="failed")),o=R(()=>{const m={};return a.value.forEach(f=>{m[f.libraryId]||(m[f.libraryId]=[]),m[f.libraryId].push(f)}),m}),h=m=>{const f={...m,id:V(),uploadedAt:new Date};return a.value.unshift(f),w(),f.id},z=(m,f)=>{const b=a.value.findIndex(I=>I.id===m);return b!==-1?(a.value[b]={...a.value[b],...f},w(),!0):!1},x=m=>{const f=a.value.findIndex(b=>b.id===m);return f!==-1?(a.value.splice(f,1),w(),!0):!1},y=m=>{const f=m.reduce((b,I)=>{const O=a.value.findIndex(H=>H.id===I);return O!==-1?(a.value.splice(O,1),b+1):b},0);return f>0&&w(),f},k=()=>{a.value=[],w()},M=m=>{a.value=a.value.filter(f=>f.libraryId!==m),w()},B=m=>a.value.filter(f=>f.libraryId===m),L=(m,f)=>{let b=f?B(f):a.value;if(!m.trim())return b;const I=m.toLowerCase();return b.filter(O=>O.name.toLowerCase().includes(I)||O.mimeType.toLowerCase().includes(I)||O.libraryName.toLowerCase().includes(I))},w=async()=>{try{const m={records:a.value.map(f=>({...f,uploadedAt:f.uploadedAt.toISOString()})),lastUpdated:new Date().toISOString()};await ce.setItem("upload-history",JSON.stringify(m))}catch(m){console.error("Failed to persist upload history:",m),T.value="Failed to save upload history"}},P=async()=>{try{const m=await ce.getItem("upload-history");if(!m)return;const f=JSON.parse(m);a.value=(f.records||[]).map(b=>({...b,uploadedAt:new Date(b.uploadedAt)})),T.value=null}catch(m){console.error("Failed to restore upload history:",m),T.value="Failed to load upload history"}},V=()=>Date.now().toString(36)+Math.random().toString(36).substr(2);return{uploadRecords:a,isLoading:s,error:T,totalRecords:e,successfulUploads:U,failedUploads:F,recordsByLibrary:o,addUploadRecord:h,updateUploadRecord:z,deleteUploadRecord:x,deleteMultipleRecords:y,clearAllRecords:k,clearLibraryRecords:M,getLibraryRecords:B,searchRecords:L,persistToStorage:w,restoreFromStorage:P,clearError:()=>{T.value=null},getStats:m=>{const f=m?B(m):a.value;return{total:f.length,successful:f.filter(b=>b.status==="success").length,failed:f.filter(b=>b.status==="failed").length,totalSize:f.reduce((b,I)=>b+I.size,0)}}}}),Ot=me({__name:"FileUploadView",setup(a,{expose:s}){s();const T=Ie(),e=Ee(),U=Et(),F=Pe(),{t:o}=fe(),h=_(),z=_("uploadedAt"),x=_("desc"),y=_(""),k={MAX_FILES_PER_BATCH:500,MAX_CONCURRENT_UPLOADS:3,MAX_TOTAL_SIZE:1024*1024*1024,PROGRESS_UPDATE_INTERVAL:500},M=new He({concurrency:k.MAX_CONCURRENT_UPLOADS,timeout:6e4,autostart:!0}),B=_({pending:0,running:0,completed:0,failed:0});M.addEventListener("start",()=>{L()}),M.addEventListener("success",()=>{B.value.completed++,L()}),M.addEventListener("error",()=>{B.value.failed++,L()}),M.addEventListener("end",()=>{L(),console.log("Upload queue finished")});const L=()=>{B.value.pending=M.length,B.value.running=M.length-B.value.pending},w=R(()=>U.isLoading),P=R(()=>T.services.map(d=>({id:d.id,name:d.name,path:d.serverUrl}))),V=R(()=>T.services.find(d=>d.id===y.value)),G=R(()=>y.value?U.getLibraryRecords(y.value):U.uploadRecords),Z=d=>{if(console.log("Files selected via multi-tab upload:",d.length),d.length>k.MAX_FILES_PER_BATCH){F.add({severity:"warn",summary:o("views.fileUploadView.tooManyFiles"),detail:o("views.fileUploadView.tooManyFilesDetail",{n:k.MAX_FILES_PER_BATCH}),life:5e3});return}if(d.reduce((C,E)=>C+E.size,0)>k.MAX_TOTAL_SIZE){F.add({severity:"warn",summary:o("views.fileUploadView.totalSizeTooLarge"),detail:o("views.fileUploadView.totalSizeTooLargeDetail",{size:K(k.MAX_TOTAL_SIZE)}),life:5e3});return}},m=async d=>{if(console.log("Upload start via multi-tab:",d.length),!V.value){F.add({severity:"error",summary:o("views.fileUploadView.error"),detail:o("views.fileUploadView.selectLibraryFirst"),life:3e3});return}(async()=>{for(let E=0;E<d.length;E+=50)d.slice(E,Math.min(E+50,d.length)).forEach(X=>{const ae=O(X);M.push(ae)}),E+50<d.length&&await new Promise(X=>setTimeout(X,50))})()},f=d=>{},b=d=>{console.log("Upload complete via multi-tab:",d.file.name),V.value&&U.addUploadRecord({name:d.file.name,size:d.file.size,mimeType:d.file.type,libraryId:V.value.id,libraryName:V.value.name,status:"success",serverId:"uploaded",localPath:d.file.name})},I=(d,S)=>{console.error("Upload error via multi-tab:",S),V.value&&U.addUploadRecord({name:d.file.name,size:d.file.size,mimeType:d.file.type,libraryId:V.value.id,libraryName:V.value.name,status:"failed",error:S}),F.add({severity:"error",summary:o("views.fileUploadView.uploadFailed"),detail:o("views.fileUploadView.uploadFailedDetail",{name:d.file.name,error:S}),life:5e3})},O=d=>S=>{if(!V.value){const C=new Error(o("views.fileUploadView.selectLibraryFirstError"));S?.(C);return}e.uploadFile(d,V.value.id).then(C=>{if(C.success)S?.(void 0,C);else throw new Error(C.error||o("views.fileUploadView.uploadFailed"))}).catch(C=>{console.error("Upload error:",C),S?.(C)})},H=async()=>{try{U.restoreFromStorage()}catch(d){console.error("Failed to refresh local files:",d),F.add({severity:"error",summary:o("views.fileUploadView.refreshFailed"),detail:o("views.fileUploadView.refreshFailedDetail"),life:3e3})}},ee=async()=>{if(G.value.length===0){F.add({severity:"warn",summary:o("views.fileUploadView.tip"),detail:o("views.fileUploadView.noFilesToClear"),life:3e3});return}try{y.value?U.clearLibraryRecords(y.value):U.clearAllRecords(),await H()}catch(d){console.error("Failed to clear files:",d),F.add({severity:"error",summary:o("views.fileUploadView.clearFailed"),detail:o("views.fileUploadView.clearFailedDetail"),life:3e3})}},le=async d=>{if(V.value)try{U.deleteUploadRecord(d.id),await H()}catch(S){console.error("Failed to delete file:",S),F.add({severity:"error",summary:o("views.fileUploadView.deleteFailed"),detail:o("views.fileUploadView.deleteFailedDetail",{name:d.name}),life:3e3})}},te=d=>{y.value=String(d),H()},oe=(d,S)=>{z.value=d,x.value=S},K=d=>{if(d===0)return"0 B";const S=1024,C=["B","KB","MB","GB","TB"],E=Math.floor(Math.log(d)/Math.log(S));return parseFloat((d/Math.pow(S,E)).toFixed(2))+" "+C[E]};Oe(async()=>{await T.initializeServerList(),T.services.length>0&&(y.value=T.services[0].id),U.restoreFromStorage()});const Y={serverListStore:T,mediaStore:e,uploadHistoryStore:U,toast:F,t:o,multiTabUploadRef:h,sortField:z,sortOrder:x,selectedLibraryId:y,FILE_LIMITS:k,uploadQueue:M,queueStats:B,updateQueueStats:L,isLoading:w,libraryOptions:P,currentLibrary:V,files:G,handleFilesSelected:Z,handleUploadStart:m,handleUploadProgress:f,handleUploadComplete:b,handleUploadError:I,createUploadJob:O,refreshFiles:H,clearAllFiles:ee,deleteFile:le,handleLibrarySelectChange:te,handleSortChange:oe,formatFileSize:K,get Select(){return Ge},get SelectTrigger(){return Qe},get SelectValue(){return We},get SelectContent(){return qe},get SelectItem(){return je},get MultiTabFileUpload(){return It}};return Object.defineProperty(Y,"__isScriptSetup",{enumerable:!1,value:!0}),Y}}),Pt={class:"h-screen bg-muted dark:bg-muted overflow-y-auto"},Nt={class:"flex-1 p-8"},Ht={class:"flex items-center justify-between mb-6"},jt={class:"flex items-center space-x-2"},qt={class:"text-sm text-muted-foreground dark:text-muted-foreground"},Wt={key:0,class:"mb-6"},Qt={class:"text-lg font-semibold text-foreground dark:text-muted-foreground mb-4"},Gt={class:"bg-primary p-4 rounded-lg"},Xt={class:"grid grid-cols-4 gap-4 text-center"},Jt={class:"text-2xl font-bold text-primary"},Zt={class:"text-sm text-muted-foreground dark:text-muted-foreground"},Kt={class:"text-2xl font-bold text-orange-600"},Yt={class:"text-sm text-muted-foreground dark:text-muted-foreground"},$t={class:"text-2xl font-bold text-green-600"},eo={class:"text-sm text-muted-foreground dark:text-muted-foreground"},lo={class:"text-2xl font-bold text-destructive"},to={class:"text-sm text-muted-foreground dark:text-muted-foreground"},oo={class:"bg-white dark:bg-muted rounded-2xl shadow-sm mb-8"};function ao(a,s,T,e,U,F){const o=Ne("router-link");return p(),v("div",Pt,[l("main",Nt,[l("div",Ht,[n(o,{to:"/",class:"flex items-center text-muted-foreground dark:text-muted-foreground hover:text-foreground transition-colors"},{default:u(()=>[s[1]||(s[1]=l("span",{class:"material-icons mr-2"},"arrow_back_ios",-1)),A(" "+i(a.$t("views.fileUploadView.backHome")),1)]),_:1}),l("div",jt,[l("span",qt,i(a.$t("views.fileUploadView.library")),1),n(e.Select,{modelValue:e.selectedLibraryId,"onUpdate:modelValue":[s[0]||(s[0]=h=>e.selectedLibraryId=h),e.handleLibrarySelectChange]},{default:u(()=>[n(e.SelectTrigger,{class:"w-48"},{default:u(()=>[n(e.SelectValue,{placeholder:a.$t("views.fileUploadView.selectLibrary")},null,8,["placeholder"])]),_:1}),n(e.SelectContent,null,{default:u(()=>[(p(!0),v(j,null,q(e.libraryOptions,h=>(p(),Q(e.SelectItem,{key:h.id,value:h.id},{default:u(()=>[A(i(h.name),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue"])])]),e.queueStats.pending>0||e.queueStats.running>0?(p(),v("div",Wt,[l("h3",Qt,i(a.$t("views.fileUploadView.queueStatus")),1),l("div",Gt,[l("div",Xt,[l("div",null,[l("div",Jt,i(e.queueStats.pending),1),l("div",Zt,i(a.$t("views.fileUploadView.pending")),1)]),l("div",null,[l("div",Kt,i(e.queueStats.running),1),l("div",Yt,i(a.$t("views.fileUploadView.uploading")),1)]),l("div",null,[l("div",$t,i(e.queueStats.completed),1),l("div",eo,i(a.$t("views.fileUploadView.completed")),1)]),l("div",null,[l("div",lo,i(e.queueStats.failed),1),l("div",to,i(a.$t("views.fileUploadView.failed")),1)])])])])):N("",!0),l("div",oo,[n(e.MultiTabFileUpload,{ref:"multiTabUploadRef",accept:"*","max-file-size":10*1024*1024,"max-files":500,"auto-upload":!1,"uploaded-files-list":e.files,"is-loading":e.isLoading,"show-uploaded-files":!0,onFilesSelected:e.handleFilesSelected,onUploadStart:e.handleUploadStart,onUploadProgress:e.handleUploadProgress,onUploadComplete:e.handleUploadComplete,onUploadError:e.handleUploadError,onDeleteFile:e.deleteFile,onClearAllFiles:e.clearAllFiles,onRefreshFiles:e.refreshFiles,onSortChange:e.handleSortChange},null,8,["uploaded-files-list","is-loading"])])])])}const ho=pe(Ot,[["render",ao],["__scopeId","data-v-8e68ba2b"],["__file","D:/mira_typescript/packages/mira-client/src/renderer/views/FileUploadView.vue"]]);export{ho as default};