Files
zsglpt/static/app/assets/ScreenshotsPage-Bv6MAoM4.js

2 lines
6.2 KiB
JavaScript

import{p as x,_ as W,a as g,o as D,k as _,i as r,g as y,j as c,d as s,b as C,e as d,l as m,F as U,z as F,t as $,B as P,E as i}from"./index-B_BXzkJV.js";async function H(){const{data:u}=await x.get("/screenshots");return u}async function q(u){const{data:f}=await x.delete(`/screenshots/${encodeURIComponent(u)}`);return f}async function G(){const{data:u}=await x.post("/screenshots/clear",{});return u}const J={class:"panel-head"},K={class:"panel-actions"},Q={key:1,class:"grid"},X=["src","alt","onError","onClick"],Y={class:"shot-body"},Z=["title"],ee={class:"shot-meta app-muted"},te={class:"shot-actions"},ne={class:"preview"},ae=["src","alt"],oe={__name:"ScreenshotsPage",setup(u){const f=g(!1),l=g([]),p=g(!1),b=g(""),k=g("");function h(e){return`/screenshots/${encodeURIComponent(e)}`}function L(e){return`/screenshots/thumb/${encodeURIComponent(e)}`}async function B(){f.value=!0;try{const e=await H();l.value=Array.isArray(e)?e:[]}catch(e){e?.response?.status===401&&(window.location.href="/login"),l.value=[]}finally{f.value=!1}}function R(e){k.value=e.display_name||e.filename||"截图预览",b.value=h(e.filename),p.value=!0}function S(e,t){const n=e?.target;n&&n.dataset.fullLoaded!=="1"&&(n.dataset.fullLoaded="1",n.src=h(t.filename))}function T(e){return new Promise((t,n)=>{e.toBlob(o=>o?t(o):n(new Error("toBlob_failed")),"image/png")})}async function V(e){if(!e)throw new Error("no_image");(!e.complete||e.naturalWidth<=0)&&(typeof e.decode=="function"?await e.decode():await new Promise((o,w)=>{e.addEventListener("load",o,{once:!0}),e.addEventListener("error",w,{once:!0})}));const t=document.createElement("canvas");t.width=e.naturalWidth,t.height=e.naturalHeight;const n=t.getContext("2d");if(!n)throw new Error("no_canvas");return n.drawImage(e,0,0),await T(t)}async function z(e){if(!e)throw new Error("no_blob");if(e.type==="image/png")return e;if(typeof createImageBitmap=="function"){const n=await createImageBitmap(e),o=document.createElement("canvas");o.width=n.width,o.height=n.height;const w=o.getContext("2d");if(!w)throw new Error("no_canvas");return w.drawImage(n,0,0),await T(o)}const t=URL.createObjectURL(e);try{const n=new Image;return n.src=t,typeof n.decode=="function"&&await n.decode(),await V(n)}finally{URL.revokeObjectURL(t)}}async function I(e){const t=await fetch(e,{credentials:"include",cache:"no-store"});if(!t.ok)throw new Error("fetch_failed");const n=await t.blob();if(!(t.headers.get("Content-Type")||n.type||"").startsWith("image/"))throw new Error("not_image");return await z(n)}async function A(){try{await P.confirm("确定要清空全部截图吗?","清空截图",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await G();if(e?.success){i.success(`已清空(删除 ${e?.deleted||0} 张)`),l.value=[],p.value=!1;return}i.error(e?.error||"操作失败")}catch(e){const t=e?.response?.data;i.error(t?.error||"操作失败")}}async function j(e){try{await P.confirm(`确定要删除截图「${e.display_name||e.filename}」吗?`,"删除截图",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await q(e.filename);if(t?.success){l.value=l.value.filter(n=>n.filename!==e.filename),b.value.includes(encodeURIComponent(e.filename))&&(p.value=!1),i.success("已删除");return}i.error(t?.error||"删除失败")}catch(t){const n=t?.response?.data;i.error(n?.error||"删除失败")}}async function M(e){const t=h(e.filename);if(!navigator.clipboard||typeof navigator.clipboard.write!="function"||typeof window.ClipboardItem>"u"){i.warning("当前环境不支持复制图片(建议使用 Chrome/Edge 并通过 HTTPS 访问);可用“下载”。");return}try{try{await navigator.clipboard.write([new ClipboardItem({"image/png":I(t)})])}catch{const n=await I(t);await navigator.clipboard.write([new ClipboardItem({"image/png":n})])}i.success("图片已复制到剪贴板")}catch{try{if(navigator.clipboard&&typeof navigator.clipboard.writeText=="function"){await navigator.clipboard.writeText(`${window.location.origin}${t}`),i.warning("复制图片失败,已复制图片链接(可直接粘贴到浏览器打开)");return}}catch{}i.warning("复制图片失败:请确认允许剪贴板权限;可用“下载”。")}}function N(e){const t=document.createElement("a");t.href=h(e.filename),t.download=e.display_name||e.filename,document.body.appendChild(t),t.click(),t.remove()}return D(B),(e,t)=>{const n=y("el-button"),o=y("el-skeleton"),w=y("el-empty"),E=y("el-card"),O=y("el-dialog");return c(),_(E,{shadow:"never",class:"panel","body-style":{padding:"14px"}},{default:r(()=>[s("div",J,[t[4]||(t[4]=s("div",{class:"panel-title"},"截图管理",-1)),s("div",K,[d(n,{loading:f.value,onClick:B},{default:r(()=>[...t[2]||(t[2]=[m("刷新",-1)])]),_:1},8,["loading"]),d(n,{type:"danger",plain:"",disabled:l.value.length===0,onClick:A},{default:r(()=>[...t[3]||(t[3]=[m("清空全部",-1)])]),_:1},8,["disabled"])])]),f.value?(c(),_(o,{key:0,rows:6,animated:""})):(c(),C(U,{key:1},[l.value.length===0?(c(),_(w,{key:0,description:"暂无截图"})):(c(),C("div",Q,[(c(!0),C(U,null,F(l.value,a=>(c(),_(E,{key:a.filename,shadow:"never",class:"shot-card","body-style":{padding:"0"}},{default:r(()=>[s("img",{class:"shot-img",src:L(a.filename),alt:a.display_name||a.filename,loading:"lazy",onError:v=>S(v,a),onClick:v=>R(a)},null,40,X),s("div",Y,[s("div",{class:"shot-name",title:a.display_name||a.filename},$(a.display_name||a.filename),9,Z),s("div",ee,$(a.created||""),1),s("div",te,[d(n,{size:"small",text:"",type:"primary",onClick:v=>M(a)},{default:r(()=>[...t[5]||(t[5]=[m("复制图片",-1)])]),_:1},8,["onClick"]),d(n,{size:"small",text:"",onClick:v=>N(a)},{default:r(()=>[...t[6]||(t[6]=[m("下载",-1)])]),_:1},8,["onClick"]),d(n,{size:"small",text:"",type:"danger",onClick:v=>j(a)},{default:r(()=>[...t[7]||(t[7]=[m("删除",-1)])]),_:1},8,["onClick"])])])]),_:2},1024))),128))]))],64)),d(O,{modelValue:p.value,"onUpdate:modelValue":t[1]||(t[1]=a=>p.value=a),title:k.value,width:"min(920px, 94vw)"},{footer:r(()=>[d(n,{onClick:t[0]||(t[0]=a=>p.value=!1)},{default:r(()=>[...t[8]||(t[8]=[m("关闭",-1)])]),_:1})]),default:r(()=>[s("div",ne,[s("img",{src:b.value,alt:k.value,class:"preview-img"},null,8,ae)])]),_:1},8,["modelValue","title"])]),_:1})}}},se=W(oe,[["__scopeId","data-v-76fa8f53"]]);export{se as default};