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

2 lines
6.4 KiB
JavaScript

import{p as x,_ as W}from"./index-DIRUAu3R.js";import{h as U,E as r}from"./vendor-element-D5SbqSD5.js";import{r as g,v as D,I as _,J as s,aY as y,A as c,B as i,z as k,Q as d,N as w,P as $,aj as H,O as P}from"./vendor-DR-vtVVc.js";import"./vendor-vue-l2lnRGj2.js";import"./vendor-axios-B9ygI19o.js";async function F(){const{data:u}=await x.get("/screenshots");return u}async function J(u){const{data:f}=await x.delete(`/screenshots/${encodeURIComponent(u)}`);return f}async function Q(){const{data:u}=await x.post("/screenshots/clear",{});return u}const Y={class:"panel-head"},q={class:"panel-actions"},G={key:1,class:"grid"},K=["src","alt","onError","onClick"],X={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(""),C=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 F();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){C.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,m)=>{e.addEventListener("load",o,{once:!0}),e.addEventListener("error",m,{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 m=o.getContext("2d");if(!m)throw new Error("no_canvas");return m.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 U.confirm("确定要清空全部截图吗?","清空截图",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await Q();if(e?.success){r.success(`已清空(删除 ${e?.deleted||0} 张)`),l.value=[],p.value=!1;return}r.error(e?.error||"操作失败")}catch(e){const t=e?.response?.data;r.error(t?.error||"操作失败")}}async function N(e){try{await U.confirm(`确定要删除截图「${e.display_name||e.filename}」吗?`,"删除截图",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await J(e.filename);if(t?.success){l.value=l.value.filter(n=>n.filename!==e.filename),b.value.includes(encodeURIComponent(e.filename))&&(p.value=!1),r.success("已删除");return}r.error(t?.error||"删除失败")}catch(t){const n=t?.response?.data;r.error(n?.error||"删除失败")}}async function O(e){const t=h(e.filename);if(!navigator.clipboard||typeof navigator.clipboard.write!="function"||typeof window.ClipboardItem>"u"){r.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})])}r.success("图片已复制到剪贴板")}catch{try{if(navigator.clipboard&&typeof navigator.clipboard.writeText=="function"){await navigator.clipboard.writeText(`${window.location.origin}${t}`),r.warning("复制图片失败,已复制图片链接(可直接粘贴到浏览器打开)");return}}catch{}r.warning("复制图片失败:请确认允许剪贴板权限;可用“下载”。")}}function j(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"),m=y("el-empty"),E=y("el-card"),M=y("el-dialog");return c(),_(E,{shadow:"never",class:"panel","body-style":{padding:"14px"}},{default:s(()=>[i("div",Y,[t[4]||(t[4]=i("div",{class:"panel-title"},"截图管理",-1)),i("div",q,[d(n,{loading:f.value,onClick:B},{default:s(()=>[...t[2]||(t[2]=[w("刷新",-1)])]),_:1},8,["loading"]),d(n,{type:"danger",plain:"",disabled:l.value.length===0,onClick:A},{default:s(()=>[...t[3]||(t[3]=[w("清空全部",-1)])]),_:1},8,["disabled"])])]),f.value?(c(),_(o,{key:0,rows:6,animated:""})):(c(),k($,{key:1},[l.value.length===0?(c(),_(m,{key:0,description:"暂无截图"})):(c(),k("div",G,[(c(!0),k($,null,H(l.value,a=>(c(),_(E,{key:a.filename,shadow:"never",class:"shot-card","body-style":{padding:"0"}},{default:s(()=>[i("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,K),i("div",X,[i("div",{class:"shot-name",title:a.display_name||a.filename},P(a.display_name||a.filename),9,Z),i("div",ee,P(a.created||""),1),i("div",te,[d(n,{size:"small",text:"",type:"primary",onClick:v=>O(a)},{default:s(()=>[...t[5]||(t[5]=[w("复制图片",-1)])]),_:1},8,["onClick"]),d(n,{size:"small",text:"",onClick:v=>j(a)},{default:s(()=>[...t[6]||(t[6]=[w("下载",-1)])]),_:1},8,["onClick"]),d(n,{size:"small",text:"",type:"danger",onClick:v=>N(a)},{default:s(()=>[...t[7]||(t[7]=[w("删除",-1)])]),_:1},8,["onClick"])])])]),_:2},1024))),128))]))],64)),d(M,{modelValue:p.value,"onUpdate:modelValue":t[1]||(t[1]=a=>p.value=a),title:C.value,width:"min(920px, 94vw)"},{footer:s(()=>[d(n,{onClick:t[0]||(t[0]=a=>p.value=!1)},{default:s(()=>[...t[8]||(t[8]=[w("关闭",-1)])]),_:1})]),default:s(()=>[i("div",ne,[i("img",{src:b.value,alt:C.value,class:"preview-img"},null,8,ae)])]),_:1},8,["modelValue","title"])]),_:1})}}},de=W(oe,[["__scopeId","data-v-76fa8f53"]]);export{de as default};