2 lines
6.4 KiB
JavaScript
2 lines
6.4 KiB
JavaScript
import{d as R,o as Z,b as d,e as t,m as i,z as m,p,U as ee,y as M,W as L,k as y,s as le,F as S,h as $,t as u,Y as ae,r,X as I,J as _,C as f,T as te,g as n,j as w,i as se,H as ne,_ as ie}from"./index-eVF4AHSu.js";import{f as oe,d as D,u as ue,a as re}from"./upload-C79x1DTb.js";import{r as b}from"./media-BgGGvhcR.js";import"./pagination-BgSlm-mj.js";const de={class:"media-library"},ce={class:"page-header"},ve={class:"header-actions"},pe={class:"filter-bar"},fe={class:"media-content"},me={class:"media-grid"},_e=["onClick"],ge={class:"media-thumb"},he={key:1,class:"thumb-placeholder"},ye=["onClick"],we={class:"media-info"},be=["title"],ke={class:"media-size"},Ce={key:0,class:"preview-panel surface"},xe={class:"preview-header"},ze={class:"preview-image"},Ue={class:"preview-meta"},Me={class:"meta-row"},Se={class:"meta-value"},$e={class:"meta-row"},Ve={class:"meta-value"},Te={key:0,class:"meta-row"},Be={class:"meta-value"},Fe={class:"meta-row"},Ne={class:"meta-value"},Pe={class:"meta-row"},Le={class:"meta-url"},Ie={class:"meta-value url-text"},De={class:"preview-actions"},Ee={class:"pagination-bar"},Oe=R({__name:"MediaLibrary",setup(je){const h=r(!1),k=r([]),V=r(0),C=r(1),x=r(24),z=r(""),g=r(""),o=r(new Set),s=r(null),U=r(!1),E=[{label:"全部类型",value:""},{label:"图片",value:"image"},{label:"视频",value:"video"},{label:"文档",value:"document"}],O=[{label:"全部位置",value:""},{label:"轮播图",value:"carousel"},{label:"产品",value:"product"},{label:"案例",value:"case"},{label:"新闻",value:"news"},{label:"页面",value:"page"},{label:"公司",value:"company"}];async function v(){h.value=!0;try{const l=await oe({fileType:z.value||void 0,usedIn:g.value||void 0,page:C.value,size:x.value});k.value=l.records,V.value=l.total}catch(l){console.warn("fetchMediaList failed:",l)}finally{h.value=!1}}Z(v);function j(l){o.value.has(l)?o.value.delete(l):o.value.add(l)}function T(l){return o.value.has(l)}async function A(){const l=document.createElement("input");l.type="file",l.multiple=!0,l.accept="image/*,video/*,.pdf",l.onchange=async()=>{const e=l.files;if(!(!e||e.length===0)){U.value=!0;try{e.length===1?await ue(e[0],g.value||"other"):await re(Array.from(e),g.value||"other"),_.success(`成功上传 ${e.length} 个文件`),await v()}catch(c){_.error(c instanceof Error?c.message:"上传失败")}finally{U.value=!1}}},l.click()}async function H(){if(o.value.size===0){_.warning("请先选择文件");return}try{await I.confirm(`确定删除选中的 ${o.value.size} 个文件?`,"确认删除",{type:"warning"});for(const l of o.value)await D(l);_.success("删除成功"),o.value.clear(),await v()}catch{}}async function J(l){var e;try{await I.confirm(`确定删除「${l.fileName}」?`,"确认删除",{type:"warning"}),await D(l.id),_.success("删除成功"),((e=s.value)==null?void 0:e.id)===l.id&&(s.value=null),await v()}catch{}}function K(l){if(!l)return;const e=b(l)||l;navigator.clipboard.writeText(e).then(()=>{_.success("链接已复制")})}function B(l){return l?l<1024?`${l} B`:l<1024*1024?`${(l/1024).toFixed(1)} KB`:`${(l/(1024*1024)).toFixed(1)} MB`:"-"}function W(l){s.value=l}return(l,e)=>{const c=f("el-button"),F=f("el-option"),N=f("el-select"),P=f("el-image"),X=f("el-checkbox"),Y=f("el-empty"),q=f("el-pagination"),G=te("loading");return n(),d("div",de,[t("div",ce,[e[8]||(e[8]=t("h2",{class:"page-title"},"媒体库",-1)),t("div",ve,[i(c,{type:"primary",icon:p(ee),loading:U.value,onClick:A},{default:m(()=>[...e[7]||(e[7]=[w(" 上传图片 ",-1)])]),_:1},8,["icon","loading"]),o.value.size>0?(n(),M(c,{key:0,type:"danger",icon:p(L),onClick:H},{default:m(()=>[w(" 批量删除 ("+u(o.value.size)+") ",1)]),_:1},8,["icon"])):y("",!0)])]),t("div",pe,[i(N,{modelValue:z.value,"onUpdate:modelValue":e[0]||(e[0]=a=>z.value=a),onChange:v,style:{width:"140px"}},{default:m(()=>[(n(),d(S,null,$(E,a=>i(F,{key:a.value,label:a.label,value:a.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),i(N,{modelValue:g.value,"onUpdate:modelValue":e[1]||(e[1]=a=>g.value=a),onChange:v,style:{width:"140px"}},{default:m(()=>[(n(),d(S,null,$(O,a=>i(F,{key:a.value,label:a.label,value:a.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),t("div",fe,[le((n(),d("div",me,[(n(!0),d(S,null,$(k.value,a=>(n(),d("div",{key:a.id,class:se(["media-item",{selected:T(a.id)}]),onClick:Q=>W(a)},[t("div",ge,[a.fileType==="image"||a.fullUrl?(n(),M(P,{key:0,src:p(b)(a.fullUrl||a.filePath),fit:"cover",class:"thumb-image"},null,8,["src"])):(n(),d("div",he,u(a.fileType==="video"?"🎬":"📄"),1)),t("div",{class:"select-check",onClick:ne(Q=>j(a.id),["stop"])},[i(X,{"model-value":T(a.id)},null,8,["model-value"])],8,ye)]),t("div",we,[t("span",{class:"media-name",title:a.fileName},u(a.fileName),9,be),t("span",ke,u(B(a.fileSize)),1)])],10,_e))),128)),!h.value&&k.value.length===0?(n(),M(Y,{key:0,description:"暂无媒体文件"})):y("",!0)])),[[G,h.value]]),s.value?(n(),d("div",Ce,[t("div",xe,[e[10]||(e[10]=t("h3",null,"文件详情",-1)),i(c,{text:"",onClick:e[2]||(e[2]=a=>s.value=null)},{default:m(()=>[...e[9]||(e[9]=[w("✕",-1)])]),_:1})]),t("div",ze,[i(P,{src:p(b)(s.value.fullUrl||s.value.filePath),fit:"contain",class:"preview-img"},null,8,["src"])]),t("div",Ue,[t("div",Me,[e[11]||(e[11]=t("span",{class:"meta-label"},"文件名",-1)),t("span",Se,u(s.value.fileName),1)]),t("div",$e,[e[12]||(e[12]=t("span",{class:"meta-label"},"大小",-1)),t("span",Ve,u(B(s.value.fileSize)),1)]),s.value.width&&s.value.height?(n(),d("div",Te,[e[13]||(e[13]=t("span",{class:"meta-label"},"尺寸",-1)),t("span",Be,u(s.value.width)+" × "+u(s.value.height),1)])):y("",!0),t("div",Fe,[e[14]||(e[14]=t("span",{class:"meta-label"},"上传时间",-1)),t("span",Ne,u(s.value.createTime||"-"),1)]),t("div",Pe,[e[15]||(e[15]=t("span",{class:"meta-label"},"访问链接",-1)),t("div",Le,[t("span",Ie,u(p(b)(s.value.fullUrl||s.value.filePath)),1),i(c,{icon:p(ae),size:"small",text:"",onClick:e[3]||(e[3]=a=>K(s.value.fullUrl||s.value.filePath))},null,8,["icon"])])])]),t("div",De,[i(c,{size:"small",type:"danger",icon:p(L),onClick:e[4]||(e[4]=a=>J(s.value))},{default:m(()=>[...e[16]||(e[16]=[w("删除",-1)])]),_:1},8,["icon"])])])):y("",!0)]),t("div",Ee,[i(q,{"current-page":C.value,"onUpdate:currentPage":e[5]||(e[5]=a=>C.value=a),"page-size":x.value,"onUpdate:pageSize":e[6]||(e[6]=a=>x.value=a),total:V.value,layout:"total, prev, pager, next",onCurrentChange:v},null,8,["current-page","page-size","total"])])])}}}),We=ie(Oe,[["__scopeId","data-v-3ba3eb04"]]);export{We as default};
|