Add WorkspaceSnapshot feature. Add support for customizing the startup page
parent
8dfe7a3d80
commit
de48ae1f0d
|
|
@ -13,8 +13,8 @@ Promise.resolve().then(async () => {
|
|||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Infinite Image Browsing</title>
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-1cbfa879.js"></script>
|
||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f652cc2f.css">
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-60751f65.js"></script>
|
||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-faeceb7f.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -304,6 +304,14 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
|
|||
async def app_fe_setting(req: AppFeSettingReq):
|
||||
conn = DataBase.get_conn()
|
||||
GlobalSetting.save_setting(conn, req.name, req.value)
|
||||
|
||||
class AppFeSettingDelReq(BaseModel):
|
||||
name: str
|
||||
|
||||
@app.delete(f"{api_base}/app_fe_setting", dependencies=[Depends(verify_secret), Depends(write_permission_required)])
|
||||
async def remove_app_fe_setting(req: AppFeSettingDelReq):
|
||||
conn = DataBase.get_conn()
|
||||
GlobalSetting.remove_setting(conn, req.name)
|
||||
|
||||
@app.get(f"{api_base}/version", dependencies=[Depends(verify_secret)])
|
||||
async def get_version():
|
||||
|
|
|
|||
|
|
@ -822,6 +822,13 @@ class GlobalSetting:
|
|||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
@classmethod
|
||||
def remove_setting(cls, conn, name: str):
|
||||
with closing(conn.cursor()) as cur:
|
||||
cur.execute("DELETE FROM global_setting WHERE name = ?", (name,))
|
||||
conn.commit()
|
||||
|
||||
@classmethod
|
||||
def get_all_settings(cls, conn):
|
||||
with closing(conn.cursor()) as cur:
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
import{d as E,bw as $,r as f,k as M,_ as T,a as c,aj as W,h as g,c as v,P as z}from"./index-1cbfa879.js";var G=["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"],H={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:z.any,required:Boolean};const L=E({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:$(H,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup:function(a,d){var t=d.attrs,h=d.emit,m=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),m({focus:function(){var e;(e=i.value)===null||e===void 0||e.focus()},blur:function(){var e;(e=i.value)===null||e===void 0||e.blur()}});var l=f(),x=function(e){if(!a.disabled){a.checked===void 0&&(o.value=e.target.checked),e.shiftKey=l.value;var r={target:c(c({},a),{},{checked:e.target.checked}),stopPropagation:function(){e.stopPropagation()},preventDefault:function(){e.preventDefault()},nativeEvent:e};a.checked!==void 0&&(i.value.checked=!!a.checked),h("change",r),l.value=!1}},C=function(e){h("click",e),l.value=e.shiftKey};return function(){var n,e=a.prefixCls,r=a.name,s=a.id,p=a.type,b=a.disabled,K=a.readonly,P=a.tabindex,B=a.autofocus,S=a.value,N=a.required,_=T(a,G),j=t.class,q=t.onFocus,w=t.onBlur,D=t.onKeydown,A=t.onKeypress,F=t.onKeyup,k=c(c({},_),t),O=Object.keys(k).reduce(function(y,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(y[u]=k[u]),y},{}),R=W(e,j,(n={},g(n,"".concat(e,"-checked"),o.value),g(n,"".concat(e,"-disabled"),b),n)),V=c(c({name:r,id:s,type:p,readonly:K,disabled:b,tabindex:P,class:"".concat(e,"-input"),checked:!!o.value,autofocus:B,value:S},O),{},{onChange:x,onClick:C,onFocus:q,onBlur:w,onKeydown:D,onKeypress:A,onKeyup:F,required:N});return v("span",{class:R},[v("input",c({ref:i},V),null),v("span",{class:"".concat(e,"-inner")},null)])}}});export{L as V};
|
||||
import{d as E,by as $,r as f,k as M,_ as T,a as c,ak as W,h as g,c as v,P as z}from"./index-60751f65.js";var G=["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"],H={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:z.any,required:Boolean};const L=E({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:$(H,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup:function(a,d){var t=d.attrs,h=d.emit,m=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),m({focus:function(){var e;(e=i.value)===null||e===void 0||e.focus()},blur:function(){var e;(e=i.value)===null||e===void 0||e.blur()}});var l=f(),x=function(e){if(!a.disabled){a.checked===void 0&&(o.value=e.target.checked),e.shiftKey=l.value;var r={target:c(c({},a),{},{checked:e.target.checked}),stopPropagation:function(){e.stopPropagation()},preventDefault:function(){e.preventDefault()},nativeEvent:e};a.checked!==void 0&&(i.value.checked=!!a.checked),h("change",r),l.value=!1}},C=function(e){h("click",e),l.value=e.shiftKey};return function(){var n,e=a.prefixCls,r=a.name,s=a.id,p=a.type,b=a.disabled,K=a.readonly,P=a.tabindex,B=a.autofocus,S=a.value,N=a.required,_=T(a,G),q=t.class,D=t.onFocus,j=t.onBlur,w=t.onKeydown,A=t.onKeypress,F=t.onKeyup,k=c(c({},_),t),O=Object.keys(k).reduce(function(y,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(y[u]=k[u]),y},{}),R=W(e,q,(n={},g(n,"".concat(e,"-checked"),o.value),g(n,"".concat(e,"-disabled"),b),n)),V=c(c({name:r,id:s,type:p,readonly:K,disabled:b,tabindex:P,class:"".concat(e,"-input"),checked:!!o.value,autofocus:B,value:S},O),{},{onChange:x,onClick:C,onFocus:D,onBlur:j,onKeydown:w,onKeypress:A,onKeyup:F,required:N});return v("span",{class:R},[v("input",c({ref:i},V),null),v("span",{class:"".concat(e,"-inner")},null)])}}});export{L as V};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
import{d as a,N as t,O as s,c as n,cH as _,V as o}from"./index-1cbfa879.js";const c={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",c,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const d=o(i,[["__scopeId","data-v-ae3fb9a8"]]);export{d as default};
|
||||
import{d as a,O as t,Q as s,c as n,cK as _,W as o}from"./index-60751f65.js";const c={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",c,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const d=o(i,[["__scopeId","data-v-ae3fb9a8"]]);export{d as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{d as ne,k as R,av as ie,W as ae,N as u,O as k,c as s,Z as e,Y as o,a0 as V,Q as r,E as re,S as a,R as m,X as D,a9 as de,U as _,aa as z,ac as ce,ad as ue,af as B,aI as pe,aJ as me,bN as ge,V as fe}from"./index-1cbfa879.js";import{S as ve}from"./index-636c275d.js";import{L as Ie,R as ke,f as _e,M as Ce}from"./MultiSelectKeep-4d1be43d.js";import{c as he,d as we,F as Se}from"./FileItem-7a698e9d.js";import{c as be,u as xe}from"./hook-5af17d32.js";import{a as ye}from"./functionalCallableComp-cf075c68.js";import"./shortcut-6aef84fe.js";import"./Checkbox-35d4df6d.js";/* empty css */import"./index-dcb9dbd7.js";const Me=d=>(pe("data-v-fbf8262b"),d=d(),me(),d),Ae={class:"hint"},Te={class:"action-bar"},$e=Me(()=>r("div",{style:{padding:"16px 0 512px"}},null,-1)),Fe={key:1},Re={class:"no-res-hint"},Ve={class:"hint"},De={key:2,class:"preview-switch"},ze=ne({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(d){const g=d,f=be(t=>ge(g.selectedTagIds,t)),{queue:N,images:i,onContextMenuClickU:C,stackViewEl:G,previewIdx:c,previewing:h,onPreviewVisibleChange:U,previewImgMove:w,canPreview:S,itemSize:b,gridItems:E,showGenInfo:p,imageGenInfo:x,q:J,multiSelectedIdxs:v,onFileItemClick:L,scroller:y,showMenuIdx:I,onFileDragStart:O,onFileDragEnd:P,cellWidth:K,onScroll:M,saveAllFileAsJson:q,props:Q,saveLoadedFileAsJson:W}=xe(f);R(()=>g.selectedTagIds,async()=>{var t;await f.reset(),await ie(),(t=y.value)==null||t.scrollToItem(0),M()},{immediate:!0}),R(()=>g,async t=>{Q.value=t},{deep:!0,immediate:!0});const X=ae(),{onClearAllSelected:Y,onSelectAll:Z,onReverseSelect:j}=he();return(t,l)=>{const H=Ce,ee=ce,te=ue,A=B,le=B,se=ve;return u(),k("div",{class:"container",ref_key:"stackViewEl",ref:G},[s(H,{show:!!e(v).length||e(X).keepMultiSelect,onClearAllSelected:e(Y),onSelectAll:e(Z),onReverseSelect:e(j)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(se,{size:"large",spinning:!e(N).isIdle},{default:o(()=>{var T,$;return[s(te,{visible:e(p),"onUpdate:visible":l[1]||(l[1]=n=>V(p)?p.value=n:null),width:"70vw","mask-closable":"",onOk:l[2]||(l[2]=n=>p.value=!1)},{cancelText:o(()=>[]),default:o(()=>[s(ee,{active:"",loading:!e(J).isIdle},{default:o(()=>[r("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:l[0]||(l[0]=n=>e(re)(e(x)))},[r("div",Ae,a(t.$t("doubleClickToCopy")),1),m(" "+a(e(x)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),r("div",Te,[s(A,{onClick:e(W)},{default:o(()=>[m(a(t.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),s(A,{onClick:e(q)},{default:o(()=>[m(a(t.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(T=e(i))!=null&&T.length?(u(),D(e(we),{key:0,ref_key:"scroller",ref:y,class:"file-list",items:e(i),"item-size":e(b).first,"key-field":"fullpath","item-secondary-size":e(b).second,gridItems:e(E),onScroll:e(M)},{after:o(()=>[$e]),default:o(({item:n,index:F})=>[s(Se,{idx:F,file:n,"cell-width":e(K),"show-menu-idx":e(I),"onUpdate:showMenuIdx":l[3]||(l[3]=oe=>V(I)?I.value=oe:null),onDragstart:e(O),onDragend:e(P),onFileItemClick:e(L),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(v).includes(F),onContextMenuClick:e(C),onPreviewVisibleChange:e(U),"is-selected-mutil-files":e(v).length>1},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange","is-selected-mutil-files"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):e(f).load&&t.selectedTagIds.and_tags.length===1&&!(($=t.selectedTagIds.folder_paths_str)!=null&&$.trim())?(u(),k("div",Fe,[r("div",Re,[r("p",Ve,a(t.$t("tagSearchNoResultsMessage")),1),s(le,{onClick:l[4]||(l[4]=n=>e(ye)()),type:"primary"},{default:o(()=>[m(a(t.$t("rebuildImageIndex")),1)]),_:1})])])):_("",!0),e(h)?(u(),k("div",De,[s(e(Ie),{onClick:l[5]||(l[5]=n=>e(w)("prev")),class:z({disable:!e(S)("prev")})},null,8,["class"]),s(e(ke),{onClick:l[6]||(l[6]=n=>e(w)("next")),class:z({disable:!e(S)("next")})},null,8,["class"])])):_("",!0)]}),_:1},8,["spinning"]),e(h)&&e(i)&&e(i)[e(c)]?(u(),D(_e,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(C)},null,8,["file","idx","onContextMenuClick"])):_("",!0)],512)}}});const qe=fe(ze,[["__scopeId","data-v-fbf8262b"]]);export{qe as default};
|
||||
import{d as ne,k as R,aw as ie,X as ae,O as u,Q as k,c as s,$ as e,Z as o,a1 as V,R as r,E as re,T as a,S as m,Y as D,aa as de,V as _,ab as z,ad as ce,ae as ue,ag as B,aK as pe,aL as me,bP as ge,W as fe}from"./index-60751f65.js";import{S as ve}from"./index-a6945554.js";import{L as Ie,R as ke,f as _e,M as we}from"./MultiSelectKeep-38167d1d.js";import{c as Ce,d as he,F as Se}from"./FileItem-497c47ae.js";import{c as be,u as xe}from"./hook-4f760f88.js";import{a as ye}from"./functionalCallableComp-a162d668.js";import"./shortcut-ff083b3f.js";import"./Checkbox-5eeb59a1.js";/* empty css */import"./index-082f03a8.js";const Me=d=>(pe("data-v-fbf8262b"),d=d(),me(),d),Ae={class:"hint"},Te={class:"action-bar"},$e=Me(()=>r("div",{style:{padding:"16px 0 512px"}},null,-1)),Fe={key:1},Re={class:"no-res-hint"},Ve={class:"hint"},De={key:2,class:"preview-switch"},ze=ne({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(d){const g=d,f=be(t=>ge(g.selectedTagIds,t)),{queue:G,images:i,onContextMenuClickU:w,stackViewEl:E,previewIdx:c,previewing:C,onPreviewVisibleChange:L,previewImgMove:h,canPreview:S,itemSize:b,gridItems:N,showGenInfo:p,imageGenInfo:x,q:P,multiSelectedIdxs:v,onFileItemClick:U,scroller:y,showMenuIdx:I,onFileDragStart:J,onFileDragEnd:K,cellWidth:O,onScroll:M,saveAllFileAsJson:q,props:Q,saveLoadedFileAsJson:W}=xe(f);R(()=>g.selectedTagIds,async()=>{var t;await f.reset(),await ie(),(t=y.value)==null||t.scrollToItem(0),M()},{immediate:!0}),R(()=>g,async t=>{Q.value=t},{deep:!0,immediate:!0});const X=ae(),{onClearAllSelected:Y,onSelectAll:Z,onReverseSelect:j}=Ce();return(t,l)=>{const H=we,ee=ce,te=ue,A=B,le=B,se=ve;return u(),k("div",{class:"container",ref_key:"stackViewEl",ref:E},[s(H,{show:!!e(v).length||e(X).keepMultiSelect,onClearAllSelected:e(Y),onSelectAll:e(Z),onReverseSelect:e(j)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(se,{size:"large",spinning:!e(G).isIdle},{default:o(()=>{var T,$;return[s(te,{visible:e(p),"onUpdate:visible":l[1]||(l[1]=n=>V(p)?p.value=n:null),width:"70vw","mask-closable":"",onOk:l[2]||(l[2]=n=>p.value=!1)},{cancelText:o(()=>[]),default:o(()=>[s(ee,{active:"",loading:!e(P).isIdle},{default:o(()=>[r("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:l[0]||(l[0]=n=>e(re)(e(x)))},[r("div",Ae,a(t.$t("doubleClickToCopy")),1),m(" "+a(e(x)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),r("div",Te,[s(A,{onClick:e(W)},{default:o(()=>[m(a(t.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),s(A,{onClick:e(q)},{default:o(()=>[m(a(t.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(T=e(i))!=null&&T.length?(u(),D(e(he),{key:0,ref_key:"scroller",ref:y,class:"file-list",items:e(i),"item-size":e(b).first,"key-field":"fullpath","item-secondary-size":e(b).second,gridItems:e(N),onScroll:e(M)},{after:o(()=>[$e]),default:o(({item:n,index:F})=>[s(Se,{idx:F,file:n,"cell-width":e(O),"show-menu-idx":e(I),"onUpdate:showMenuIdx":l[3]||(l[3]=oe=>V(I)?I.value=oe:null),onDragstart:e(J),onDragend:e(K),onFileItemClick:e(U),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(v).includes(F),onContextMenuClick:e(w),onPreviewVisibleChange:e(L),"is-selected-mutil-files":e(v).length>1},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange","is-selected-mutil-files"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):e(f).load&&t.selectedTagIds.and_tags.length===1&&!(($=t.selectedTagIds.folder_paths_str)!=null&&$.trim())?(u(),k("div",Fe,[r("div",Re,[r("p",Ve,a(t.$t("tagSearchNoResultsMessage")),1),s(le,{onClick:l[4]||(l[4]=n=>e(ye)()),type:"primary"},{default:o(()=>[m(a(t.$t("rebuildImageIndex")),1)]),_:1})])])):_("",!0),e(C)?(u(),k("div",De,[s(e(Ie),{onClick:l[5]||(l[5]=n=>e(h)("prev")),class:z({disable:!e(S)("prev")})},null,8,["class"]),s(e(ke),{onClick:l[6]||(l[6]=n=>e(h)("next")),class:z({disable:!e(S)("next")})},null,8,["class"])])):_("",!0)]}),_:1},8,["spinning"]),e(C)&&e(i)&&e(i)[e(c)]?(u(),D(_e,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(w)},null,8,["file","idx","onContextMenuClick"])):_("",!0)],512)}}});const qe=fe(ze,[["__scopeId","data-v-fbf8262b"]]);export{qe as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
import{d as v,cI as I,bX as C,N as l,O as _,Q as f,c,Y as r,R as h,S as d,Z as e,X as F,a9 as z,ca as B,cJ as x,af as R,V as S}from"./index-1cbfa879.js";import{u as $,a as V,k as E,F as A,d as N}from"./FileItem-7a698e9d.js";import"./functionalCallableComp-cf075c68.js";import"./index-dcb9dbd7.js";/* empty css */const T={class:"actions-panel actions"},L={key:0,class:"file-list"},U={class:"hint"},H=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(O){const{stackViewEl:w}=$().toRefs(),{itemSize:p,gridItems:k,cellWidth:b}=V(),i=E(),{selectdFiles:n}=I(i),u=C(),y=async t=>{const s=B(t);s&&i.addFiles(s.nodes)},D=async()=>{u.pushAction(async()=>{const t=await x.value.post("/zip",{paths:n.value.map(o=>o.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),a=document.createElement("a");a.href=s,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},g=t=>{n.value.splice(t,1)};return(t,s)=>{const a=R;return l(),_("div",{class:"container",ref_key:"stackViewEl",ref:w,onDrop:y},[f("div",T,[c(a,{onClick:s[0]||(s[0]=o=>e(i).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(u).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(n).length?(l(),F(e(N),{key:1,ref:"scroller",class:"file-list",items:e(n).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(k)},{default:r(({item:o,index:m})=>[c(A,{idx:m,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:Q=>g(m),"full-screen-preview-image-url":e(z)(o),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(l(),_("div",L,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const Y=S(H,[["__scopeId","data-v-aab31da2"]]);export{Y as default};
|
||||
|
|
@ -0,0 +1 @@
|
|||
import{d as v,cL as C,bZ as I,O as l,Q as _,R as f,c,Z as r,S as h,T as d,$ as e,Y as F,aa as z,cc as B,cM as $,ag as x,W as R}from"./index-60751f65.js";import{u as S,a as E,k as T,F as V,d as A}from"./FileItem-497c47ae.js";import"./functionalCallableComp-a162d668.js";import"./index-082f03a8.js";/* empty css */const L={class:"actions-panel actions"},N={key:0,class:"file-list"},U={class:"hint"},H=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(O){const{stackViewEl:w}=S().toRefs(),{itemSize:p,gridItems:k,cellWidth:b}=E(),i=T(),{selectdFiles:n}=C(i),u=I(),y=async t=>{const s=B(t);s&&i.addFiles(s.nodes)},D=async()=>{u.pushAction(async()=>{const t=await $.value.post("/zip",{paths:n.value.map(o=>o.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),a=document.createElement("a");a.href=s,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},g=t=>{n.value.splice(t,1)};return(t,s)=>{const a=x;return l(),_("div",{class:"container",ref_key:"stackViewEl",ref:w,onDrop:y},[f("div",L,[c(a,{onClick:s[0]||(s[0]=o=>e(i).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(u).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(n).length?(l(),F(e(A),{key:1,ref:"scroller",class:"file-list",items:e(n).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(k)},{default:r(({item:o,index:m})=>[c(V,{idx:m,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:Q=>g(m),"full-screen-preview-image-url":e(z)(o),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(l(),_("div",N,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const Y=R(H,[["__scopeId","data-v-aab31da2"]]);export{Y as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
import{c as o,A as g,cM as i,cq as b,X as w,ae as c,df as y,dg as h,ag as x,cj as O,aa as S,x as l,dh as F,az as I,v as M,r as m,af as v,q as k,S as D,di as _}from"./index-60751f65.js";var j={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const P=j;function p(a){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable}))),n.forEach(function(r){V(a,r,t[r])})}return a}function V(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}var d=function(e,t){var n=p({},e,t.attrs);return o(g,p({},n,{icon:P}),null)};d.displayName="DownloadOutlined";d.inheritAttrs=!1;const C=d,R=async a=>(await i.value.get("/files",{params:{folder_path:a}})).data,T=async a=>(await i.value.post("/delete_files",{file_paths:a})).data,U=async(a,e,t)=>(await i.value.post("/move_files",{file_paths:a,dest:e,create_dest_folder:t})).data,A=async(a,e,t)=>(await i.value.post("/copy_files",{file_paths:a,dest:e,create_dest_folder:t})).data,N=async a=>{await i.value.post("/mkdirs",{dest_folder:a})},E=a=>{const e=m("");return new Promise(t=>{c.confirm({title:l("inputFolderName"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=k(a,e.value);await N(n),t()}})})},H=()=>o("p",{style:{background:"var(--zp-secondary-background)",padding:"8px",borderLeft:"4px solid var(--primary-color)"}},[D("Tips: "),l("multiSelectTips")]),$=(a,e)=>{const t=b(),n=w(),r=s=>{var u;return!!((u=t.tagMap.get(a.fullpath))!=null&&u.some(f=>f.id===s))};c.confirm({width:"80vw",title:a.name,icon:null,content:()=>o("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column"}},[o("video",{style:{maxHeight:y?"80vh":"60vh",maxWidth:"100%",minWidth:"70%"},src:h(a),controls:!0,autoplay:!0},null),o("div",{style:{marginTop:"4px"}},[n.conf.all_custom_tags.map(s=>o("div",{key:s.id,onClick:()=>e==null?void 0:e(s.id),style:{background:r(s.id)?t.getColor(s.name):"var(--zp-primary-background)",color:r(s.id)?"white":t.getColor(s.name),margin:"2px",padding:"2px 16px","border-radius":"4px",display:"inline-block",cursor:"pointer","font-weight":"bold",transition:".5s all ease",border:`2px solid ${t.getColor(s.name)}`,"user-select":"none"}},[s.name]))]),o("div",{class:"actions",style:{marginTop:"16px"}},[o(x,{onClick:()=>O([S(a,!0)])},{icon:o(C,null,null),default:l("download")})])]),maskClosable:!0,wrapClassName:"hidden-antd-btns-modal"})},q=()=>{c.confirm({title:l("confirmRebuildImageIndex"),onOk:async()=>{await F(),I.emit("searchIndexExpired"),M.success(l("rebuildComplete"))}})},B=a=>{const e=m(a.split(/[\\/]/).pop()??"");return new Promise(t=>{c.confirm({title:l("rename"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=await _({path:a,name:e.value});t(n.new_path)}})})};export{H as M,q as a,B as b,A as c,T as d,$ as e,R as g,U as m,E as o};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{c as o,A as g,cJ as i,co as b,W as w,ad as c,dc as y,dd as h,af as x,ch as O,a9 as S,x as r,de as F,ay as I,v as M,r as m,ae as v,q as k,R as D,df as _}from"./index-1cbfa879.js";function z(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var P={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const V=P;function p(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(a);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(a).filter(function(l){return Object.getOwnPropertyDescriptor(a,l).enumerable}))),n.forEach(function(l){j(t,l,a[l])})}return t}function j(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}var d=function(e,a){var n=p({},e,a.attrs);return o(g,p({},n,{icon:V}),null)};d.displayName="DownloadOutlined";d.inheritAttrs=!1;const C=d,T=async t=>(await i.value.get("/files",{params:{folder_path:t}})).data,U=async t=>(await i.value.post("/delete_files",{file_paths:t})).data,A=async(t,e,a)=>(await i.value.post("/move_files",{file_paths:t,dest:e,create_dest_folder:a})).data,E=async(t,e,a)=>(await i.value.post("/copy_files",{file_paths:t,dest:e,create_dest_folder:a})).data,N=async t=>{await i.value.post("/mkdirs",{dest_folder:t})},H=t=>{const e=m("");return new Promise(a=>{c.confirm({title:r("inputFolderName"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=k(t,e.value);await N(n),a()}})})},W=()=>o("p",{style:{background:"var(--zp-secondary-background)",padding:"8px",borderLeft:"4px solid var(--primary-color)"}},[D("Tips: "),r("multiSelectTips")]),$=(t,e)=>{const a=b(),n=w(),l=s=>{var u;return!!((u=a.tagMap.get(t.fullpath))!=null&&u.some(f=>f.id===s))};c.confirm({width:"80vw",title:t.name,icon:null,content:()=>o("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column"}},[o("video",{style:{maxHeight:y?"80vh":"60vh",maxWidth:"100%",minWidth:"70%"},src:h(t),controls:!0,autoplay:!0},null),o("div",{style:{marginTop:"4px"}},[n.conf.all_custom_tags.map(s=>o("div",{key:s.id,onClick:()=>e==null?void 0:e(s.id),style:{background:l(s.id)?a.getColor(s.name):"var(--zp-primary-background)",color:l(s.id)?"white":a.getColor(s.name),margin:"2px",padding:"2px 16px","border-radius":"4px",display:"inline-block",cursor:"pointer","font-weight":"bold",transition:".5s all ease",border:`2px solid ${a.getColor(s.name)}`,"user-select":"none"}},[s.name]))]),o("div",{class:"actions",style:{marginTop:"16px"}},[o(x,{onClick:()=>O([S(t,!0)])},{icon:o(C,null,null),default:r("download")})])]),maskClosable:!0,wrapClassName:"hidden-antd-btns-modal"})},B=()=>{c.confirm({title:r("confirmRebuildImageIndex"),onOk:async()=>{await F(),I.emit("searchIndexExpired"),M.success(r("rebuildComplete"))}})},q=t=>{const e=m(t.split(/[\\/]/).pop()??"");return new Promise(a=>{c.confirm({title:r("rename"),content:()=>o(v,{value:e.value,"onUpdate:value":n=>e.value=n},null),async onOk(){if(!e.value)return;const n=await _({path:t,name:e.value});a(n.new_path)}})})};export{W as M,B as a,q as b,E as c,U as d,$ as e,T as g,z as l,A as m,H as o};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#d03f0a}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #d03f0a;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#d03f0a;border-color:#d03f0a}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#d03f0a;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.panel[data-v-e5d3d829]{padding:8px;margin:16px;border-radius:8px;background:var(--zp-primary-background);overflow:auto;height:calc(100% - 32px)}.panel[data-v-e5d3d829]>:not(:first-child){margin-left:16px}.lang-select-wrap[data-v-e5d3d829]{width:128px;display:inline-block;padding-right:16px}h2[data-v-e5d3d829]{margin:64px 0 16px;font-weight:700}.row[data-v-e5d3d829]{margin-top:16px;padding:0 16px}.col[data-v-e5d3d829]{display:flex}.clear-btn[data-v-e5d3d829]{margin-left:16px}
|
||||
@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#d03f0a}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #d03f0a;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#d03f0a;border-color:#d03f0a}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#d03f0a;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.panel[data-v-b3189bd2]{padding:8px;margin:16px;border-radius:8px;background:var(--zp-primary-background);overflow:auto;height:calc(100% - 32px)}.panel[data-v-b3189bd2]>:not(:first-child){margin-left:16px}.lang-select-wrap[data-v-b3189bd2]{width:128px;display:inline-block;padding-right:16px}h2[data-v-b3189bd2]{margin:64px 0 16px;font-weight:700}.row[data-v-b3189bd2]{margin-top:16px;padding:0 16px}.col[data-v-b3189bd2]{display:flex}.clear-btn[data-v-b3189bd2]{margin-left:16px}
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{u as w,a as y,F as k,d as x}from"./FileItem-7a698e9d.js";import{d as b,W as F,co as h,r as D,b7 as I,bb as C,N as V,O as E,c,Y as z,Z as e,a9 as S,ca as B,cK as K,V as R}from"./index-1cbfa879.js";import"./functionalCallableComp-cf075c68.js";import"./index-dcb9dbd7.js";/* empty css */const A=b({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=F(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=y(),g=h(),s=D(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=K([...s.value,...l.nodes]))},v=a=>{s.value.splice(a,1)};return I(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(s.value),setFiles:a=>s.value=a})}),(a,l)=>(V(),E("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{ref:"scroller",class:"file-list",items:s.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:z(({item:t,index:r})=>{var n;return[c(k,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:N=>v(r),"full-screen-preview-image-url":e(S)(t),"extra-tags":(n=t==null?void 0:t.tags)==null?void 0:n.map(e(g).tagConvert),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","enable-close-icon","onCloseIconClick","full-screen-preview-image-url","extra-tags"])]}),_:1},8,["items","item-size","item-secondary-size","gridItems"])],544))}});const H=R(A,[["__scopeId","data-v-f35f4802"]]);export{H as default};
|
||||
|
|
@ -0,0 +1 @@
|
|||
import{u as w,a as y,F as k,d as x}from"./FileItem-497c47ae.js";import{d as F,X as b,cq as h,r as D,b9 as I,bd as C,O as E,Q as V,c as n,Z as z,$ as e,aa as S,cc as B,cN as R,W as $}from"./index-60751f65.js";import"./functionalCallableComp-a162d668.js";import"./index-082f03a8.js";/* empty css */const q=F({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=b(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=y(),g=h(),s=D(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=R([...s.value,...l.nodes]))},v=a=>{s.value.splice(a,1)};return I(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(s.value),setFiles:a=>s.value=a})}),(a,l)=>(E(),V("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[n(e(x),{ref:"scroller",class:"file-list",items:s.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:z(({item:t,index:r})=>{var c;return[n(k,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:A=>v(r),"full-screen-preview-image-url":e(S)(t),"extra-tags":(c=t==null?void 0:t.tags)==null?void 0:c.map(e(g).tagConvert),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","enable-close-icon","onCloseIconClick","full-screen-preview-image-url","extra-tags"])]}),_:1},8,["items","item-size","item-secondary-size","gridItems"])],544))}});const H=$(q,[["__scopeId","data-v-f35f4802"]]);export{H as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{ah as F,r as g,c5 as D,c6 as A,H as b,B as N,bX as z,bk as G,c7 as H}from"./index-1cbfa879.js";import{u as L,a as O,b as Q,e as j}from"./FileItem-7a698e9d.js";import{a as B,b as T,c as U}from"./MultiSelectKeep-4d1be43d.js";let W=0;const X=()=>++W,K=(o,i,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),c=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,w=e=>{var s;l==="replace"?t.value=e:l==="merge"&&(b((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(s=t==null?void 0:t.value)!==null&&s!==void 0?s:[],...e])},d=e=>A(void 0,void 0,void 0,function*(){if(a.value||c.value&&typeof e>"u")return!1;a.value=!0;const s=X();f.value=s;try{let r;if(typeof e=="number"){if(r=n[e],typeof r!="string")return!1}else r=n[n.length-1];const I=yield o(r);if(v.has(s))return v.delete(s),!1;w(i(I));const u=I.cursor;if((e===n.length-1||typeof e!="number")&&(c.value=!u.has_next,u.has_next)){const y=u.next_cursor||u.next;b(typeof y=="string"),n.push(y)}}finally{f.value===s&&(a.value=!1)}return!0}),h=()=>{v.add(f.value),a.value=!1},S=(e=!1)=>A(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&h(),b(!a.value),n.splice(0,n.length,""),a.value=!1,t.value=void 0,c.value=!1,s&&(yield d())}),m=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return D({abort:h,load:c,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:m,iter:{[Symbol.asyncIterator]:m}})},ee=o=>F(K(o,i=>i.files,{dataUpdateStrategy:"merge"})),te=o=>{const i=F(new Set),l=N(()=>(o.res??[]).filter(p=>!i.has(p.fullpath))),n=z(),{stackViewEl:c,multiSelectedIdxs:t,stack:a,scroller:f,props:v}=L({images:l}).toRefs(),{itemSize:w,gridItems:d,cellWidth:h,onScroll:S}=O({fetchNext:()=>o.next()}),{showMenuIdx:m}=Q(),{onFileDragStart:e,onFileDragEnd:s}=B(),{showGenInfo:r,imageGenInfo:I,q:u,onContextMenuClick:y,onFileItemClick:C}=T({openNext:G}),{previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:J,canPreview:P}=U(),R=async(p,x,q)=>{a.value=[{curr:"",files:l.value}],await y(p,x,q)};j("removeFiles",async({paths:p})=>{p.forEach(x=>i.add(x))});const k=()=>{H(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:R,stackViewEl:c,previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:J,canPreview:P,itemSize:w,gridItems:d,showGenInfo:r,imageGenInfo:I,q:u,onContextMenuClick:y,onFileItemClick:C,showMenuIdx:m,multiSelectedIdxs:t,onFileDragStart:e,onFileDragEnd:s,cellWidth:h,onScroll:S,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()},props:v}};export{ee as c,te as u};
|
||||
import{ai as F,r as g,c7 as D,c8 as A,H as b,B as N,bZ as z,bm as G,c9 as H}from"./index-60751f65.js";import{u as L,a as O,b as Q,e as j}from"./FileItem-497c47ae.js";import{a as B,b as T,c as U}from"./MultiSelectKeep-38167d1d.js";let W=0;const Z=()=>++W,K=(o,i,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),c=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,w=e=>{var s;l==="replace"?t.value=e:l==="merge"&&(b((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(s=t==null?void 0:t.value)!==null&&s!==void 0?s:[],...e])},d=e=>A(void 0,void 0,void 0,function*(){if(a.value||c.value&&typeof e>"u")return!1;a.value=!0;const s=Z();f.value=s;try{let r;if(typeof e=="number"){if(r=n[e],typeof r!="string")return!1}else r=n[n.length-1];const I=yield o(r);if(v.has(s))return v.delete(s),!1;w(i(I));const u=I.cursor;if((e===n.length-1||typeof e!="number")&&(c.value=!u.has_next,u.has_next)){const y=u.next_cursor||u.next;b(typeof y=="string"),n.push(y)}}finally{f.value===s&&(a.value=!1)}return!0}),p=()=>{v.add(f.value),a.value=!1},S=(e=!1)=>A(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&p(),b(!a.value),n.splice(0,n.length,""),a.value=!1,t.value=void 0,c.value=!1,s&&(yield d())}),h=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return D({abort:p,load:c,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:h,iter:{[Symbol.asyncIterator]:h}})},ee=o=>F(K(o,i=>i.files,{dataUpdateStrategy:"merge"})),te=o=>{const i=F(new Set),l=N(()=>(o.res??[]).filter(m=>!i.has(m.fullpath))),n=z(),{stackViewEl:c,multiSelectedIdxs:t,stack:a,scroller:f,props:v}=L({images:l}).toRefs(),{itemSize:w,gridItems:d,cellWidth:p,onScroll:S}=O({fetchNext:()=>o.next()}),{showMenuIdx:h}=Q(),{onFileDragStart:e,onFileDragEnd:s}=B(),{showGenInfo:r,imageGenInfo:I,q:u,onContextMenuClick:y,onFileItemClick:C}=T({openNext:G}),{previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:J,canPreview:P}=U(),R=async(m,x,q)=>{a.value=[{curr:"",files:l.value}],await y(m,x,q)};j("removeFiles",async({paths:m})=>{m.forEach(x=>i.add(x))});const k=()=>{H(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:R,stackViewEl:c,previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:J,canPreview:P,itemSize:w,gridItems:d,showGenInfo:r,imageGenInfo:I,q:u,onContextMenuClick:y,onFileItemClick:C,showMenuIdx:h,multiSelectedIdxs:t,onFileDragStart:e,onFileDragEnd:s,cellWidth:p,onScroll:S,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()},props:v}};export{ee as c,te as u};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
import{d as x,X as $,aH as g,dj as b,r as w,O as p,Q as d,R as a,c as r,Z as i,S as u,T as n,U as B,a3 as I,$ as m,t as R,v as _,x as v,af as W,ag as D,dk as N,W as V}from"./index-60751f65.js";/* empty css */const F={class:"container"},L={class:"actions"},T={class:"desc"},U={class:"snapshot"},j=x({__name:"index",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(q){const h=$(),t=g(),f=e=>{h.tabList=R(e.tabs)},k=b(async e=>{await N(`workspace_snapshot_${e.id}`),t.snapshots=t.snapshots.filter(c=>c.id!==e.id),_.success(v("deleteSuccess"))}),o=w(""),y=async()=>{if(!o.value){_.error(v("nameRequired"));return}const e=t.createSnapshot(o.value);await t.addSnapshot(e),_.success(v("saveCompleted"))};return(e,c)=>{const C=W,l=D;return p(),d("div",F,[a("div",L,[r(C,{value:o.value,"onUpdate:value":c[0]||(c[0]=s=>o.value=s),placeholder:e.$t("name"),style:{"max-width":"300px"}},null,8,["value","placeholder"]),r(l,{type:"primary",onClick:y},{default:i(()=>[u(n(e.$t("saveWorkspaceSnapshot")),1)]),_:1})]),a("p",T,n(e.$t("WorkspaceSnapshotDesc")),1),a("ul",U,[(p(!0),d(B,null,I(m(t).snapshots,s=>(p(),d("li",{key:s.id},[a("div",null,[a("span",null,n(s.name),1)]),a("div",null,[r(l,{onClick:S=>f(s)},{default:i(()=>[u(n(e.$t("restore")),1)]),_:2},1032,["onClick"]),r(l,{onClick:S=>m(k)(s)},{default:i(()=>[u(n(e.$t("remove")),1)]),_:2},1032,["onClick"])])]))),128))])])}}});const G=V(j,[["__scopeId","data-v-292fd2a3"]]);export{G as default};
|
||||
|
|
@ -0,0 +1 @@
|
|||
.container[data-v-292fd2a3]{background:var(--zp-secondary-background);height:100%;overflow:auto;display:flex;flex-direction:column;padding:16px}.container .actions[data-v-292fd2a3]{margin-bottom:16px}.container .actions *[data-v-292fd2a3]{margin-right:10px}.desc[data-v-292fd2a3]{border-left:2px solid var(--primary-color);background:var(--zp-primary-background);padding:8px;white-space:pre-wrap;color:var(--zp-secondary)}.snapshot[data-v-292fd2a3]{list-style:none;padding:0;margin:0;width:512px}.snapshot li[data-v-292fd2a3]{display:flex;justify-content:space-between;align-items:center;padding:10px;background-color:var(--zp-secondary-variant-background);border-radius:4px;margin-bottom:10px;transition:all .3s ease;border-bottom:2px solid var(--zp-luminous-deep)}.snapshot li[data-v-292fd2a3]:hover{border-bottom:2px solid var(--zp-luminous)}.snapshot li div[data-v-292fd2a3]:first-child{flex-grow:1;font-weight:700}.snapshot li div[data-v-292fd2a3]:last-child{display:flex;gap:10px}
|
||||
|
|
@ -1 +1 @@
|
|||
import{r as F,o as P,cC as K,ar as L,B as l,at as T,au as I,d as $,u as B,cD as _,b as y,ba as V,cE as A,aj as E,h as c,c as D,a as G}from"./index-1cbfa879.js";const W=function(){var o=F(!1);return P(function(){o.value=K()}),o};var M=Symbol("rowContextKey"),U=function(r){T(M,r)},k=function(){return L(M,{gutter:l(function(){}),wrap:l(function(){}),supportFlexGap:l(function(){})})};I("top","middle","bottom","stretch");I("start","end","center","space-around","space-between");var q=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},H=$({compatConfig:{MODE:3},name:"ARow",props:q(),setup:function(r,N){var m=N.slots,v=B("row",r),d=v.prefixCls,h=v.direction,j,x=F({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),S=W();P(function(){j=_.subscribe(function(e){var t=r.gutter||0;(!Array.isArray(t)&&y(t)==="object"||Array.isArray(t)&&(y(t[0])==="object"||y(t[1])==="object"))&&(x.value=e)})}),V(function(){_.unsubscribe(j)});var w=l(function(){var e=[0,0],t=r.gutter,n=t===void 0?0:t,s=Array.isArray(n)?n:[n,0];return s.forEach(function(i,b){if(y(i)==="object")for(var a=0;a<A.length;a++){var p=A[a];if(x.value[p]&&i[p]!==void 0){e[b]=i[p];break}}else e[b]=i||0}),e});U({gutter:w,supportFlexGap:S,wrap:l(function(){return r.wrap})});var R=l(function(){var e;return E(d.value,(e={},c(e,"".concat(d.value,"-no-wrap"),r.wrap===!1),c(e,"".concat(d.value,"-").concat(r.justify),r.justify),c(e,"".concat(d.value,"-").concat(r.align),r.align),c(e,"".concat(d.value,"-rtl"),h.value==="rtl"),e))}),O=l(function(){var e=w.value,t={},n=e[0]>0?"".concat(e[0]/-2,"px"):void 0,s=e[1]>0?"".concat(e[1]/-2,"px"):void 0;return n&&(t.marginLeft=n,t.marginRight=n),S.value?t.rowGap="".concat(e[1],"px"):s&&(t.marginTop=s,t.marginBottom=s),t});return function(){var e;return D("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});const Y=H;function J(o){return typeof o=="number"?"".concat(o," ").concat(o," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(o)?"0 0 ".concat(o):o}var Q=function(){return{span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},xxxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}};const Z=$({compatConfig:{MODE:3},name:"ACol",props:Q(),setup:function(r,N){var m=N.slots,v=k(),d=v.gutter,h=v.supportFlexGap,j=v.wrap,x=B("col",r),S=x.prefixCls,w=x.direction,R=l(function(){var e,t=r.span,n=r.order,s=r.offset,i=r.push,b=r.pull,a=S.value,p={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(g){var f,u={},C=r[g];typeof C=="number"?u.span=C:y(C)==="object"&&(u=C||{}),p=G(G({},p),{},(f={},c(f,"".concat(a,"-").concat(g,"-").concat(u.span),u.span!==void 0),c(f,"".concat(a,"-").concat(g,"-order-").concat(u.order),u.order||u.order===0),c(f,"".concat(a,"-").concat(g,"-offset-").concat(u.offset),u.offset||u.offset===0),c(f,"".concat(a,"-").concat(g,"-push-").concat(u.push),u.push||u.push===0),c(f,"".concat(a,"-").concat(g,"-pull-").concat(u.pull),u.pull||u.pull===0),c(f,"".concat(a,"-rtl"),w.value==="rtl"),f))}),E(a,(e={},c(e,"".concat(a,"-").concat(t),t!==void 0),c(e,"".concat(a,"-order-").concat(n),n),c(e,"".concat(a,"-offset-").concat(s),s),c(e,"".concat(a,"-push-").concat(i),i),c(e,"".concat(a,"-pull-").concat(b),b),e),p)}),O=l(function(){var e=r.flex,t=d.value,n={};if(t&&t[0]>0){var s="".concat(t[0]/2,"px");n.paddingLeft=s,n.paddingRight=s}if(t&&t[1]>0&&!h.value){var i="".concat(t[1]/2,"px");n.paddingTop=i,n.paddingBottom=i}return e&&(n.flex=J(e),j.value===!1&&!n.minWidth&&(n.minWidth=0)),n});return function(){var e;return D("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});export{Z as C,Y as R};
|
||||
import{r as F,o as P,cF as K,as as L,B as i,au as T,av as I,d as B,u as $,cG as _,b as y,bc as V,cH as A,ak as E,h as c,c as M,a as G}from"./index-60751f65.js";const W=function(){var o=F(!1);return P(function(){o.value=K()}),o};var D=Symbol("rowContextKey"),k=function(r){T(D,r)},H=function(){return L(D,{gutter:i(function(){}),wrap:i(function(){}),supportFlexGap:i(function(){})})};I("top","middle","bottom","stretch");I("start","end","center","space-around","space-between");var U=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},q=B({compatConfig:{MODE:3},name:"ARow",props:U(),setup:function(r,N){var m=N.slots,v=$("row",r),d=v.prefixCls,h=v.direction,j,x=F({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),S=W();P(function(){j=_.subscribe(function(e){var t=r.gutter||0;(!Array.isArray(t)&&y(t)==="object"||Array.isArray(t)&&(y(t[0])==="object"||y(t[1])==="object"))&&(x.value=e)})}),V(function(){_.unsubscribe(j)});var w=i(function(){var e=[0,0],t=r.gutter,n=t===void 0?0:t,s=Array.isArray(n)?n:[n,0];return s.forEach(function(l,b){if(y(l)==="object")for(var a=0;a<A.length;a++){var p=A[a];if(x.value[p]&&l[p]!==void 0){e[b]=l[p];break}}else e[b]=l||0}),e});k({gutter:w,supportFlexGap:S,wrap:i(function(){return r.wrap})});var R=i(function(){var e;return E(d.value,(e={},c(e,"".concat(d.value,"-no-wrap"),r.wrap===!1),c(e,"".concat(d.value,"-").concat(r.justify),r.justify),c(e,"".concat(d.value,"-").concat(r.align),r.align),c(e,"".concat(d.value,"-rtl"),h.value==="rtl"),e))}),O=i(function(){var e=w.value,t={},n=e[0]>0?"".concat(e[0]/-2,"px"):void 0,s=e[1]>0?"".concat(e[1]/-2,"px"):void 0;return n&&(t.marginLeft=n,t.marginRight=n),S.value?t.rowGap="".concat(e[1],"px"):s&&(t.marginTop=s,t.marginBottom=s),t});return function(){var e;return M("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});const Y=q;function J(o){return typeof o=="number"?"".concat(o," ").concat(o," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(o)?"0 0 ".concat(o):o}var Q=function(){return{span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},xxxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}};const Z=B({compatConfig:{MODE:3},name:"ACol",props:Q(),setup:function(r,N){var m=N.slots,v=H(),d=v.gutter,h=v.supportFlexGap,j=v.wrap,x=$("col",r),S=x.prefixCls,w=x.direction,R=i(function(){var e,t=r.span,n=r.order,s=r.offset,l=r.push,b=r.pull,a=S.value,p={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(g){var f,u={},C=r[g];typeof C=="number"?u.span=C:y(C)==="object"&&(u=C||{}),p=G(G({},p),{},(f={},c(f,"".concat(a,"-").concat(g,"-").concat(u.span),u.span!==void 0),c(f,"".concat(a,"-").concat(g,"-order-").concat(u.order),u.order||u.order===0),c(f,"".concat(a,"-").concat(g,"-offset-").concat(u.offset),u.offset||u.offset===0),c(f,"".concat(a,"-").concat(g,"-push-").concat(u.push),u.push||u.push===0),c(f,"".concat(a,"-").concat(g,"-pull-").concat(u.pull),u.pull||u.pull===0),c(f,"".concat(a,"-rtl"),w.value==="rtl"),f))}),E(a,(e={},c(e,"".concat(a,"-").concat(t),t!==void 0),c(e,"".concat(a,"-order-").concat(n),n),c(e,"".concat(a,"-offset-").concat(s),s),c(e,"".concat(a,"-push-").concat(l),l),c(e,"".concat(a,"-pull-").concat(b),b),e),p)}),O=i(function(){var e=r.flex,t=d.value,n={};if(t&&t[0]>0){var s="".concat(t[0]/2,"px");n.paddingLeft=s,n.paddingRight=s}if(t&&t[1]>0&&!h.value){var l="".concat(t[1]/2,"px");n.paddingTop=l,n.paddingBottom=l}return e&&(n.flex=J(e),j.value===!1&&!n.minWidth&&(n.minWidth=0)),n});return function(){var e;return M("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});export{Z as C,Y as R};
|
||||
|
|
@ -1 +1 @@
|
|||
import{d as z,bw as D,ar as A,cF as j,av as k,l as V,cG as B,cb as y,e as $,c as a,_ as T,h as r,a as P,bC as F,P as b}from"./index-1cbfa879.js";var G=["class","style"],M=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:b.any,delay:Number,indicator:b.any}},p=null;function O(t,n){return!!t&&!!n&&!isNaN(Number(n))}function q(t){var n=t.indicator;p=typeof n=="function"?n:function(){return a(n,null,null)}}const H=z({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:D(M(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:A("configProvider",j)}},data:function(){var n=this.spinning,e=this.delay,i=O(n,e);return{sSpinning:n&&!i}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var n=this;k(function(){n.debouncifyUpdateSpinning(),n.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(n){var e=n||this.$props,i=e.delay;i&&(this.cancelExistingSpin(),this.updateSpinning=V(this.originalUpdateSpinning,i))},updateSpinning:function(){var n=this.spinning,e=this.sSpinning;e!==n&&(this.sSpinning=n)},cancelExistingSpin:function(){var n=this.updateSpinning;n&&n.cancel&&n.cancel()},renderIndicator:function(n){var e="".concat(n,"-dot"),i=B(this,"indicator");return i===null?null:(Array.isArray(i)&&(i=i.length===1?i[0]:i),y(i)?$(i,{class:e}):p&&y(p())?$(p(),{class:e}):a("span",{class:"".concat(e," ").concat(n,"-dot-spin")},[a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null)]))}},render:function(){var n,e,i,o=this.$props,f=o.size,x=o.prefixCls,h=o.tip,d=h===void 0?(n=(e=this.$slots).tip)===null||n===void 0?void 0:n.call(e):h,N=o.wrapperClassName,l=this.$attrs,v=l.class,_=l.style,C=T(l,G),S=this.configProvider,U=S.getPrefixCls,w=S.direction,s=U("spin",x),u=this.sSpinning,E=(i={},r(i,s,!0),r(i,"".concat(s,"-sm"),f==="small"),r(i,"".concat(s,"-lg"),f==="large"),r(i,"".concat(s,"-spinning"),u),r(i,"".concat(s,"-show-text"),!!d),r(i,"".concat(s,"-rtl"),w==="rtl"),r(i,v,!!v),i),m=a("div",P(P({},C),{},{style:_,class:E}),[this.renderIndicator(s),d?a("div",{class:"".concat(s,"-text")},[d]):null]),g=F(this);if(g&&g.length){var c,I=(c={},r(c,"".concat(s,"-container"),!0),r(c,"".concat(s,"-blur"),u),c);return a("div",{class:["".concat(s,"-nested-loading"),N]},[u&&a("div",{key:"loading"},[m]),a("div",{class:I,key:"container"},[g])])}return m}});export{H as S,q as s};
|
||||
import{d as z,by as D,as as A,cI as j,aw as k,l as V,cJ as B,cd as y,e as $,c as a,_ as T,h as r,a as P,bE as J,P as b}from"./index-60751f65.js";var M=["class","style"],O=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:b.any,delay:Number,indicator:b.any}},p=null;function W(t,n){return!!t&&!!n&&!isNaN(Number(n))}function F(t){var n=t.indicator;p=typeof n=="function"?n:function(){return a(n,null,null)}}const G=z({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:D(O(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:A("configProvider",j)}},data:function(){var n=this.spinning,e=this.delay,i=W(n,e);return{sSpinning:n&&!i}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var n=this;k(function(){n.debouncifyUpdateSpinning(),n.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(n){var e=n||this.$props,i=e.delay;i&&(this.cancelExistingSpin(),this.updateSpinning=V(this.originalUpdateSpinning,i))},updateSpinning:function(){var n=this.spinning,e=this.sSpinning;e!==n&&(this.sSpinning=n)},cancelExistingSpin:function(){var n=this.updateSpinning;n&&n.cancel&&n.cancel()},renderIndicator:function(n){var e="".concat(n,"-dot"),i=B(this,"indicator");return i===null?null:(Array.isArray(i)&&(i=i.length===1?i[0]:i),y(i)?$(i,{class:e}):p&&y(p())?$(p(),{class:e}):a("span",{class:"".concat(e," ").concat(n,"-dot-spin")},[a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null)]))}},render:function(){var n,e,i,o=this.$props,f=o.size,x=o.prefixCls,h=o.tip,d=h===void 0?(n=(e=this.$slots).tip)===null||n===void 0?void 0:n.call(e):h,N=o.wrapperClassName,l=this.$attrs,v=l.class,_=l.style,C=T(l,M),S=this.configProvider,U=S.getPrefixCls,E=S.direction,s=U("spin",x),u=this.sSpinning,I=(i={},r(i,s,!0),r(i,"".concat(s,"-sm"),f==="small"),r(i,"".concat(s,"-lg"),f==="large"),r(i,"".concat(s,"-spinning"),u),r(i,"".concat(s,"-show-text"),!!d),r(i,"".concat(s,"-rtl"),E==="rtl"),r(i,v,!!v),i),m=a("div",P(P({},C),{},{style:_,class:I}),[this.renderIndicator(s),d?a("div",{class:"".concat(s,"-text")},[d]):null]),g=J(this);if(g&&g.length){var c,w=(c={},r(c,"".concat(s,"-container"),!0),r(c,"".concat(s,"-blur"),u),c);return a("div",{class:["".concat(s,"-nested-loading"),N]},[u&&a("div",{key:"loading"},[m]),a("div",{class:w,key:"container"},[g])])}return m}});export{G as S,F as s};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
import{R as y,C as v}from"./index-9c194ca4.js";import{bL as f,c as d,A as w,d as P,O as a,Q as c,R as r,U as S,a3 as O,aD as b,Z as R,S as u,T as p,$,ag as V,W as L,J as x,cr as _,cE as m}from"./index-60751f65.js";const A=f(y),E=f(v);var H={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z"}}]},name:"pushpin",theme:"filled"};const C=H;function h(t){for(var e=1;e<arguments.length;e++){var s=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(i){return Object.getOwnPropertyDescriptor(s,i).enumerable}))),n.forEach(function(i){N(t,i,s[i])})}return t}function N(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var l=function(e,s){var n=h({},e,s.attrs);return d(w,h({},n,{icon:C}),null)};l.displayName="PushpinFilled";l.inheritAttrs=!1;const z=l,F={class:"record-container"},I={style:{flex:"1"}},k={class:"rec-actions"},B=["onClick"],D=P({__name:"HistoryRecord",props:{records:{}},emits:["reuseRecord"],setup(t){return(e,s)=>{const n=V;return a(),c("div",null,[r("ul",F,[(a(!0),c(S,null,O(e.records.getRecords(),i=>(a(),c("li",{key:i.id,class:"record"},[r("div",I,[b(e.$slots,"default",{record:i},void 0,!0)]),r("div",k,[d(n,{onClick:g=>e.$emit("reuseRecord",i),type:"primary"},{default:R(()=>[u(p(e.$t("restore")),1)]),_:2},1032,["onClick"]),r("div",{class:"pin",onClick:g=>e.records.switchPin(i)},[d($(z)),u(" "+p(e.records.isPinned(i)?e.$t("unpin"):e.$t("pin")),1)],8,B)])]))),128))])])}}});const T=L(D,[["__scopeId","data-v-834a248f"]]);class o{constructor(e=128,s=[],n=[]){this.maxLength=e,this.records=s,this.pinnedValues=n}isPinned(e){return this.pinnedValues.some(s=>s.id===e.id)}add(e){this.records.length>=this.maxLength&&this.records.pop(),this.records.unshift({...e,id:x()+Date.now(),time:new Date().toLocaleString()})}pin(e){const s=this.records.findIndex(n=>n.id===e.id);s!==-1&&this.records.splice(s,1),this.pinnedValues.push(e)}unpin(e){const s=this.pinnedValues.findIndex(n=>n.id===e.id);s!==-1&&this.pinnedValues.splice(s,1),this.records.unshift(e)}switchPin(e){this.isPinned(e)?this.unpin(e):this.pin(e)}getRecords(){return[...this.pinnedValues,...this.records]}}const q=_(`${m}fuzzy-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}}),M=_(`${m}tag-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}});export{T as H,E as _,A as a,q as f,M as t};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{R as y,C as v}from"./index-9b043d82.js";import{bJ as f,c as d,A as w,d as P,N as a,O as c,Q as r,T as S,a2 as b,aC as O,Y as R,R as u,S as p,Z as V,af as $,V as x,I as C,cp as _}from"./index-1cbfa879.js";const A=f(y),E=f(v);var H={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z"}}]},name:"pushpin",theme:"filled"};const L=H;function h(t){for(var e=1;e<arguments.length;e++){var s=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(i){return Object.getOwnPropertyDescriptor(s,i).enumerable}))),n.forEach(function(i){N(t,i,s[i])})}return t}function N(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var l=function(e,s){var n=h({},e,s.attrs);return d(w,h({},n,{icon:L}),null)};l.displayName="PushpinFilled";l.inheritAttrs=!1;const z=l,F={class:"record-container"},I={style:{flex:"1"}},k={class:"rec-actions"},B=["onClick"],J=P({__name:"HistoryRecord",props:{records:{}},emits:["reuseRecord"],setup(t){return(e,s)=>{const n=$;return a(),c("div",null,[r("ul",F,[(a(!0),c(S,null,b(e.records.getRecords(),i=>(a(),c("li",{key:i.id,class:"record"},[r("div",I,[O(e.$slots,"default",{record:i},void 0,!0)]),r("div",k,[d(n,{onClick:g=>e.$emit("reuseRecord",i),type:"primary"},{default:R(()=>[u(p(e.$t("restore")),1)]),_:2},1032,["onClick"]),r("div",{class:"pin",onClick:g=>e.records.switchPin(i)},[d(V(z)),u(" "+p(e.records.isPinned(i)?e.$t("unpin"):e.$t("pin")),1)],8,B)])]))),128))])])}}});const T=x(J,[["__scopeId","data-v-834a248f"]]);class o{constructor(e=128,s=[],n=[]){this.maxLength=e,this.records=s,this.pinnedValues=n}isPinned(e){return this.pinnedValues.some(s=>s.id===e.id)}add(e){this.records.length>=this.maxLength&&this.records.pop(),this.records.unshift({...e,id:C()+Date.now(),time:new Date().toLocaleString()})}pin(e){const s=this.records.findIndex(n=>n.id===e.id);s!==-1&&this.records.splice(s,1),this.pinnedValues.push(e)}unpin(e){const s=this.pinnedValues.findIndex(n=>n.id===e.id);s!==-1&&this.pinnedValues.splice(s,1),this.records.unshift(e)}switchPin(e){this.isPinned(e)?this.unpin(e):this.pin(e)}getRecords(){return[...this.pinnedValues,...this.records]}}const m="iib://",q=_(`${m}fuzzy-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}}),M=_(`${m}tag-search-HistoryRecord`,new o,{serializer:{read:t=>{const e=JSON.parse(t);return new o(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}});export{T as H,E as _,A as a,q as f,M as t};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -7,8 +7,8 @@
|
|||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Infinite Image Browsing</title>
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-1cbfa879.js"></script>
|
||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f652cc2f.css">
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-60751f65.js"></script>
|
||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-faeceb7f.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
import { onMounted, watch } from 'vue'
|
||||
import { getGlobalSetting, setAppFeSetting } from './api'
|
||||
import { useGlobalStore, presistKeys } from './store/useGlobalStore'
|
||||
import { useWorkspeaceSnapshot } from './store/useWorkspeaceSnapshot'
|
||||
import { getQuickMovePaths } from '@/page/taskRecord/autoComplete'
|
||||
import SplitViewTab from '@/page/SplitViewTab/SplitViewTab.vue'
|
||||
import { Dict, createReactiveQueue, globalEvents, useGlobalEventListen } from './util'
|
||||
|
|
@ -12,15 +13,17 @@ import { isTauri } from './util/env'
|
|||
import { delay } from 'vue3-ts-util'
|
||||
import { exportFn } from './defineExportFunc'
|
||||
import { debounce, once, cloneDeep } from 'lodash-es'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { t } from './i18n'
|
||||
|
||||
const globalStore = useGlobalStore()
|
||||
const wsStore = useWorkspeaceSnapshot()
|
||||
const queue = createReactiveQueue()
|
||||
|
||||
const presistKeysFiltered = presistKeys.filter(v => !['tabListHistoryRecord', 'recent'].includes(v))
|
||||
|
||||
let lastConf = null as any
|
||||
const watchGlobalSettingChange = once(async () => {
|
||||
if (isTauri) return
|
||||
globalStore.$subscribe((debounce(async () => {
|
||||
const conf = {} as Dict
|
||||
presistKeysFiltered.forEach((key) => {
|
||||
|
|
@ -37,6 +40,33 @@ const watchGlobalSettingChange = once(async () => {
|
|||
|
||||
})
|
||||
|
||||
const restoreWorkspaceSnapshot = once( async () => {
|
||||
await delay(100)
|
||||
const initPage = globalStore.defaultInitinalPage
|
||||
if (initPage === 'empty') {
|
||||
return
|
||||
}
|
||||
if (initPage === 'last-workspace-state') {
|
||||
const last = globalStore.tabListHistoryRecord?.[1]
|
||||
if (!last?.tabs) {
|
||||
return
|
||||
}
|
||||
globalStore.tabList = cloneDeep(last.tabs)
|
||||
message.success(t('restoreLastWorkspaceStateSuccess'))
|
||||
} else {
|
||||
const id = initPage.split('_')?.[2]
|
||||
const shot = wsStore.snapshots.find(v => v.id === id)
|
||||
if (!shot?.tabs) {
|
||||
return
|
||||
}
|
||||
globalStore.tabList = cloneDeep(shot.tabs)
|
||||
message.success(t('restoreWorkspaceSnapshotSuccess'))
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
useGlobalEventListen('updateGlobalSetting', async () => {
|
||||
await refreshTauriConf()
|
||||
console.log(tauriConf.value)
|
||||
|
|
@ -44,8 +74,9 @@ useGlobalEventListen('updateGlobalSetting', async () => {
|
|||
globalStore.conf = resp
|
||||
const r = await getQuickMovePaths(resp)
|
||||
globalStore.quickMovePaths = r.filter((v) => v?.dir?.trim?.())
|
||||
|
||||
const restoreFeGlobalSetting = globalStore?.conf?.app_fe_setting?.global
|
||||
if (!isTauri && restoreFeGlobalSetting) {
|
||||
if (restoreFeGlobalSetting) {
|
||||
console.log('restoreFeGlobalSetting', restoreFeGlobalSetting)
|
||||
lastConf = cloneDeep(restoreFeGlobalSetting)
|
||||
presistKeysFiltered.forEach((key) => {
|
||||
|
|
@ -56,6 +87,7 @@ useGlobalEventListen('updateGlobalSetting', async () => {
|
|||
})
|
||||
}
|
||||
watchGlobalSettingChange()
|
||||
restoreWorkspaceSnapshot()
|
||||
exportFn(globalStore)
|
||||
resolveQueryActions(globalStore)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ export interface GlobalConf {
|
|||
enable_access_control: boolean
|
||||
launch_mode: 'server' | 'sd'
|
||||
export_fe_fn: boolean
|
||||
app_fe_setting: Record<'global'|'fullscreen_layout', any>
|
||||
app_fe_setting: Record<'global'|'fullscreen_layout'| `workspace_snapshot_${string}`, any>
|
||||
is_readonly: boolean
|
||||
}
|
||||
|
||||
|
|
@ -160,4 +160,8 @@ export const batchGetDirTop4MediaInfo = async (paths: string[]) => {
|
|||
|
||||
export const setAppFeSetting = async (name: keyof GlobalConf['app_fe_setting'], setting: Record<string, any>) => {
|
||||
await axiosInst.value.post('/app_fe_setting', { name, value: JSON.stringify(setting) })
|
||||
}
|
||||
|
||||
export const removeAppFeSetting = async (name: keyof GlobalConf['app_fe_setting']) => {
|
||||
await axiosInst.value.delete('/app_fe_setting', { data: { name } })
|
||||
}
|
||||
|
|
@ -1,6 +1,21 @@
|
|||
import type { IIBI18nMap } from '.'
|
||||
|
||||
export const en: IIBI18nMap = {
|
||||
restoreLastWorkspaceStateSuccess: 'Restore Last Workspace State Success',
|
||||
restoreWorkspaceSnapshotSuccess: 'Restore Workspace Snapshot Success',
|
||||
openOnAppStart: 'Open on app start',
|
||||
confirmThisAction: 'Confirm this action?',
|
||||
WorkspaceSnapshotDesc: `Using the Workspace Snapshot feature, you can save the current state of the workspace so that you can quickly restore to the current state the next time you open IIB.
|
||||
You can specify which snapshot to restore to when starting IIB in the global settings page, or restore to the last workspace state before closing.`,
|
||||
saveWorkspaceSnapshot: 'Save Workspace Snapshot',
|
||||
WorkspaceSnapshot: 'Workspace Snapshot',
|
||||
restoreLastWorkspaceState: 'Restore Last Workspace State',
|
||||
restoreWorkspaceSnapshot: 'Restore Workspace Snapshot: {0}',
|
||||
nameRequired: 'Name is required',
|
||||
save: 'Save',
|
||||
name: 'Name',
|
||||
saveCompleted: 'Save completed',
|
||||
openThisAppInNewWindow: 'Open IIB in a new window',
|
||||
readonly: 'Read-only',
|
||||
accessLimited: 'Access Limited',
|
||||
selectFolder: 'Select Folder',
|
||||
|
|
|
|||
|
|
@ -1,4 +1,19 @@
|
|||
export const zhHans = {
|
||||
restoreLastWorkspaceStateSuccess: '成功恢复上次工作区状态',
|
||||
restoreWorkspaceSnapshotSuccess: '成功恢复工作区快照',
|
||||
openOnAppStart: '启动时打开',
|
||||
confirmThisAction: '确认这个操作?',
|
||||
saveWorkspaceSnapshot: '保存工作区快照',
|
||||
WorkspaceSnapshot: '工作区快照',
|
||||
restoreLastWorkspaceState: '恢复上次工作区状态',
|
||||
restoreWorkspaceSnapshot: '恢复工作区快照: {0}',
|
||||
WorkspaceSnapshotDesc: `使用工作区快照功能你可以保存当前工作区的状态,以便下次打开IIB时快速恢复到当前状态。
|
||||
你可以在全局设置页面中指定启动IIB时恢复到哪一个快照,或者恢复到最后关闭前的工作区状态。`,
|
||||
nameRequired: '名称不能为空',
|
||||
save: '保存',
|
||||
name: '名称',
|
||||
saveCompleted: '保存完成',
|
||||
openThisAppInNewWindow: '在新窗口打开本应用',
|
||||
readonly: '只读',
|
||||
accessLimited: '访问受限',
|
||||
selectFolder: '选择文件夹',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,21 @@
|
|||
import type { IIBI18nMap } from '.'
|
||||
|
||||
export const zhHant: Partial<IIBI18nMap> = {
|
||||
restoreLastWorkspaceStateSuccess: '成功恢復上次工作區狀態',
|
||||
restoreWorkspaceSnapshotSuccess: '成功恢復工作區快照',
|
||||
openOnAppStart: '啟動時打開',
|
||||
confirmThisAction: '確認這個操作?',
|
||||
WorkspaceSnapshotDesc: `使用工作區快照功能你可以保存當前工作區的狀態,以便下次打開IIB時快速恢復到當前狀態。
|
||||
你可以在全局設置頁面中指定啟動IIB時恢復到哪一個快照,或者恢復到最後關閉前的工作區狀態。`,
|
||||
WorkspaceSnapshot: '工作區快照',
|
||||
restoreLastWorkspaceState: '恢復上次工作區狀態',
|
||||
restoreWorkspaceSnapshot: '恢復工作區快照: {0}',
|
||||
saveWorkspaceSnapshot: '保存工作區快照',
|
||||
save: '保存',
|
||||
name: '名稱',
|
||||
nameRequired: '名稱不能為空',
|
||||
saveCompleted: '保存完成',
|
||||
openThisAppInNewWindow: '在新窗口打開本應用',
|
||||
readonly: '只讀',
|
||||
accessLimited: '訪問受限',
|
||||
selectFolder: '選擇文件夾',
|
||||
|
|
|
|||
|
|
@ -25,7 +25,8 @@ const compMap: Record<TabPane['type'], ReturnType<typeof defineAsyncComponent>>
|
|||
'fuzzy-search': defineAsyncComponent(() => import('@/page/TagSearch/SubstrSearch.vue')),
|
||||
'img-sli': defineAsyncComponent(() => import('@/page/ImgSli/ImgSliPagePane.vue')),
|
||||
'batch-download': defineAsyncComponent(() => import('@/page/batchDownload/batchDownload.vue')),
|
||||
'grid-view': defineAsyncComponent(() => import('@/page/gridView/gridView.vue'))
|
||||
'grid-view': defineAsyncComponent(() => import('@/page/gridView/gridView.vue')),
|
||||
'workspace-snapshot': defineAsyncComponent(() => import('@/page/WorkspeaceSnapshot/index.vue'))
|
||||
}
|
||||
const onEdit = (idx: number, targetKey: any, action: string) => {
|
||||
const tab = global.tabList[idx]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<script lang="ts" setup>
|
||||
import { useGlobalStore, type TabPane } from '@/store/useGlobalStore'
|
||||
import { Snapshot, useWorkspeaceSnapshot } from '@/store/useWorkspeaceSnapshot'
|
||||
import { uniqueId } from 'lodash-es'
|
||||
import { computed } from 'vue'
|
||||
import { ok } from 'vue3-ts-util'
|
||||
|
|
@ -16,6 +17,7 @@ import { isTauri } from '@/util/env'
|
|||
|
||||
const global = useGlobalStore()
|
||||
const imgsli = useImgSliStore()
|
||||
const workspaceSnapshot = useWorkspeaceSnapshot()
|
||||
const props = defineProps<{
|
||||
tabIdx: number; paneIdx: number, popAddPathModal?: {
|
||||
path: string
|
||||
|
|
@ -33,8 +35,10 @@ const compCnMap: Partial<Record<TabPane['type'], string>> = {
|
|||
local: t('local'),
|
||||
'tag-search': t('imgSearch'),
|
||||
'fuzzy-search': t('fuzzy-search'),
|
||||
'batch-download': t('batchDownload') + ' / ' + t('archive'),
|
||||
'workspace-snapshot': t('WorkspaceSnapshot'),
|
||||
|
||||
'global-setting': t('globalSettings'),
|
||||
'batch-download': t('batchDownload') + ' / ' + t('archive')
|
||||
}
|
||||
type FileTransModeIn = 'preset' | ExtraPathType
|
||||
const createPane = (type: TabPane['type'], path?: string, mode?: FileTransModeIn) => {
|
||||
|
|
@ -47,6 +51,7 @@ const createPane = (type: TabPane['type'], path?: string, mode?: FileTransModeIn
|
|||
case 'global-setting':
|
||||
case 'tag-search':
|
||||
case 'batch-download':
|
||||
case 'workspace-snapshot':
|
||||
case 'fuzzy-search':
|
||||
case 'empty':
|
||||
pane = { type, name: compCnMap[type]!, key: Date.now() + uniqueId() }
|
||||
|
|
@ -110,6 +115,10 @@ const restoreRecord = () => {
|
|||
global.tabList = cloneDeep(lastRecord.value.tabs)
|
||||
}
|
||||
|
||||
const restoreWorkspaceSnapshot = (item: Snapshot) => {
|
||||
global.tabList = cloneDeep(item.tabs)
|
||||
}
|
||||
|
||||
const machine = computed(() => {
|
||||
if (isTauri) return 'desktop application'
|
||||
if ( global.conf?.launch_mode === 'sd') return 'sd-webui extension'
|
||||
|
|
@ -254,10 +263,13 @@ const modes = computed(() => {
|
|||
<span class="text line-clamp-1">{{ $t('imgCompare') }}</span>
|
||||
</li>
|
||||
<li class="item" v-if="canpreviewInNewWindow" @click="previewInNewWindow">
|
||||
<span class="text line-clamp-1">{{ $t('openInNewWindow') }}</span>
|
||||
<span class="text line-clamp-1">{{ $t('openThisAppInNewWindow') }}</span>
|
||||
</li>
|
||||
<li class="item" v-if="lastRecord?.tabs.length" @click="restoreRecord">
|
||||
<span class="text line-clamp-1">{{ $t('restoreLastRecord') }}</span>
|
||||
<span class="text line-clamp-1">{{ $t('restoreLastWorkspaceState') }}</span>
|
||||
</li>
|
||||
<li class="item" v-for="item in workspaceSnapshot.snapshots" :key="item.id" @click="restoreWorkspaceSnapshot(item)">
|
||||
<span class="text line-clamp-1">{{ $t('restoreWorkspaceSnapshot', [item.name]) }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -346,7 +358,7 @@ const modes = computed(() => {
|
|||
|
||||
.content {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
grid-template-columns: repeat(auto-fit, minmax(384px, 1fr));
|
||||
grid-gap: 20px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,125 @@
|
|||
<script lang="ts" setup>
|
||||
import { useGlobalStore } from '@/store/useGlobalStore'
|
||||
import { useWorkspeaceSnapshot, Snapshot } from '@/store/useWorkspeaceSnapshot'
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { removeAppFeSetting } from '@/api'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { t } from '@/i18n'
|
||||
import { ref } from 'vue'
|
||||
import { actionConfirm } from '@/util'
|
||||
|
||||
const g = useGlobalStore()
|
||||
defineProps<{
|
||||
tabIdx: number
|
||||
paneIdx: number
|
||||
id: string,
|
||||
paneKey: string
|
||||
}>()
|
||||
const store = useWorkspeaceSnapshot()
|
||||
|
||||
const onRestore = (snap: Snapshot) => {
|
||||
g.tabList = cloneDeep(snap.tabs)
|
||||
}
|
||||
|
||||
const onRemove = actionConfirm(async (snap: Snapshot) => {
|
||||
|
||||
await removeAppFeSetting(`workspace_snapshot_${snap.id}`)
|
||||
store.snapshots = store.snapshots.filter(item => item.id !== snap.id)
|
||||
message.success(t('deleteSuccess'))
|
||||
})
|
||||
|
||||
const name = ref('')
|
||||
|
||||
const onCreate = async () => {
|
||||
if (!name.value) {
|
||||
message.error(t('nameRequired'))
|
||||
return
|
||||
|
||||
}
|
||||
const snap = store.createSnapshot(name.value)
|
||||
await store.addSnapshot(snap)
|
||||
message.success(t('saveCompleted'))
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
<template>
|
||||
<div class="container">
|
||||
<div class="actions">
|
||||
<a-input v-model:value="name" :placeholder="$t('name')" style="max-width: 300px;" />
|
||||
<a-button type="primary" @click="onCreate">{{ $t('saveWorkspaceSnapshot') }}</a-button>
|
||||
</div>
|
||||
<p class="desc">
|
||||
{{ $t('WorkspaceSnapshotDesc') }}
|
||||
</p>
|
||||
<ul class="snapshot">
|
||||
<li v-for="item in store.snapshots" :key="item.id">
|
||||
<div>
|
||||
<span>{{ item.name }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<a-button @click="onRestore(item)">{{ $t('restore') }}</a-button>
|
||||
<a-button @click="onRemove(item)">{{ $t('remove') }}</a-button>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
<style scoped lang="scss">
|
||||
.container {
|
||||
background: var(--zp-secondary-background);
|
||||
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 16px;
|
||||
.actions {
|
||||
margin-bottom: 16px;
|
||||
* {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.desc {
|
||||
border-left: 2px solid var(--primary-color);
|
||||
background: var(--zp-primary-background);
|
||||
padding: 8px;
|
||||
white-space: pre-wrap;
|
||||
color: var(--zp-secondary)
|
||||
}
|
||||
|
||||
.snapshot {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 512px;
|
||||
|
||||
li {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
background-color: var(--zp-secondary-variant-background);
|
||||
border-radius: 4px;
|
||||
margin-bottom: 10px;
|
||||
transition: all 0.3s ease;
|
||||
border-bottom: 2px solid var(--zp-luminous-deep);
|
||||
&:hover {
|
||||
border-bottom: 2px solid var(--zp-luminous);
|
||||
}
|
||||
|
||||
div:first-child {
|
||||
flex-grow: 1;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div:last-child {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
<script setup lang="ts">
|
||||
import { t } from '@/i18n'
|
||||
import { useGlobalStore, type Shortcut } from '@/store/useGlobalStore'
|
||||
import { ref } from 'vue'
|
||||
import { useGlobalStore, type Shortcut, type DefaultInitinalPage } from '@/store/useGlobalStore'
|
||||
import { useWorkspeaceSnapshot } from '@/store/useWorkspeaceSnapshot'
|
||||
import { computed, ref } from 'vue'
|
||||
import { SearchSelect } from 'vue3-ts-util'
|
||||
import { sortMethodConv, sortMethods } from '@/page/fileTransfer/fileSort'
|
||||
import { relaunch } from '@tauri-apps/api/process'
|
||||
|
|
@ -14,6 +15,7 @@ import { openRebuildImageIndexModal } from '@/components/functionalCallableComp'
|
|||
|
||||
|
||||
const globalStore = useGlobalStore()
|
||||
const wsStore = useWorkspeaceSnapshot()
|
||||
|
||||
const langChanged = ref(false)
|
||||
const reload = async () => {
|
||||
|
|
@ -37,6 +39,15 @@ const oninitTauriLaunchConf = async () => {
|
|||
await fs.removeFile(appConfFilename)
|
||||
await relaunch()
|
||||
}
|
||||
|
||||
const defaultInitinalPageOptions = computed(() => {
|
||||
const r: { text: string, value: DefaultInitinalPage }[] = [
|
||||
{ value: 'empty', text: t('emptyStartPage') },
|
||||
{ value: 'last-workspace-state', text: t('restoreLastWorkspaceState') },
|
||||
...wsStore.snapshots.map(item => ({ value: `workspace_snapshot_${item.id}` as `workspace_snapshot_${string}`, text: t('restoreWorkspaceSnapshot', [item.name]) }))
|
||||
]
|
||||
return r
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<div class="panel">
|
||||
|
|
@ -60,6 +71,9 @@ const oninitTauriLaunchConf = async () => {
|
|||
<a-form-item :label="$t('longPressOpenContextMenu')">
|
||||
<a-switch v-model:checked="globalStore.longPressOpenContextMenu" />
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('openOnAppStart')">
|
||||
<search-select v-model:value="globalStore.defaultInitinalPage" :options="defaultInitinalPageOptions" />
|
||||
</a-form-item>
|
||||
<a-form-item :label="$t('lang')">
|
||||
<div class="lang-select-wrap">
|
||||
<SearchSelect :options="langs" v-model:value="globalStore.lang" @change="langChanged = true" />
|
||||
|
|
|
|||
|
|
@ -28,4 +28,5 @@ export const tagSearchHistory = useLocalStorage(`${prefix}tag-search-HistoryReco
|
|||
},
|
||||
write: JSON.stringify,
|
||||
},
|
||||
}) as Ref<HistoryRecord<MatchImageByTagsReq>>
|
||||
}) as Ref<HistoryRecord<MatchImageByTagsReq>>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { Props as FileTransferProps } from '@/page/fileTransfer/hooks'
|
|||
import type { getQuickMovePaths } from '@/page/taskRecord/autoComplete'
|
||||
import { type Dict, type ReturnTypeAsync } from '@/util'
|
||||
import { AnyFn, usePreferredDark } from '@vueuse/core'
|
||||
import { cloneDeep, uniqueId } from 'lodash-es'
|
||||
import { cloneDeep, uniqueId, last } from 'lodash-es'
|
||||
import { defineStore } from 'pinia'
|
||||
import { VNode, computed, onMounted, reactive, toRaw, watch } from 'vue'
|
||||
import { ref } from 'vue'
|
||||
|
|
@ -22,7 +22,7 @@ interface TabPaneBase {
|
|||
}
|
||||
|
||||
interface OtherTabPane extends TabPaneBase {
|
||||
type: 'global-setting' | 'tag-search' | 'batch-download'
|
||||
type: 'global-setting' | 'tag-search' | 'batch-download' | 'workspace-snapshot'
|
||||
}
|
||||
|
||||
export interface EmptyStartTabPane extends TabPaneBase {
|
||||
|
|
@ -134,6 +134,8 @@ export interface Tab {
|
|||
|
||||
export type Shortcut = Record<`toggle_tag_${string}` | 'delete' | 'download', string | undefined>
|
||||
|
||||
export type DefaultInitinalPage = `workspace_snapshot_${string}` | 'empty' | 'last-workspace-state'
|
||||
|
||||
export const copyPane = (pane: TabPane) => {
|
||||
return cloneDeep({
|
||||
...pane,
|
||||
|
|
@ -141,13 +143,26 @@ export const copyPane = (pane: TabPane) => {
|
|||
})
|
||||
}
|
||||
|
||||
export const copyTab = (tab: Tab) => {
|
||||
export const copyTab = (tab: Tab): Tab => {
|
||||
return {
|
||||
...tab,
|
||||
panes: tab.panes.map(copyPane)
|
||||
}
|
||||
}
|
||||
|
||||
export const copyTabFilterWorkspaceSnapShot = (tab: Tab): Tab => {
|
||||
if (!tab.panes.some(v => v.type === 'workspace-snapshot')) {
|
||||
return copyTab(tab)
|
||||
}
|
||||
const newPanes = tab.panes.filter(v => v.type !== 'workspace-snapshot').map(copyPane)
|
||||
return {
|
||||
...tab,
|
||||
panes: newPanes,
|
||||
key: last(newPanes)?.key ?? ''
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export type ActionConfirmRequired = 'deleteOneOnly'
|
||||
|
||||
export const presistKeys = [
|
||||
|
|
@ -167,7 +182,8 @@ export const presistKeys = [
|
|||
'onlyFoldersAndImages',
|
||||
'shortcut',
|
||||
'ignoredConfirmActions',
|
||||
'previewBgOpacity'
|
||||
'previewBgOpacity',
|
||||
'defaultInitinalPage'
|
||||
]
|
||||
|
||||
function cellWidthMap(x: number): number {
|
||||
|
|
@ -341,7 +357,8 @@ export const useGlobalStore = defineStore(
|
|||
ignoredConfirmActions,
|
||||
getShortPath,
|
||||
extraPathAliasMap,
|
||||
previewBgOpacity
|
||||
previewBgOpacity,
|
||||
defaultInitinalPage: ref<DefaultInitinalPage>('empty')
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
import { setAppFeSetting } from '@/api'
|
||||
import { defineStore } from 'pinia'
|
||||
import { toRaw, watch } from 'vue'
|
||||
import { ref } from 'vue'
|
||||
import { prefix } from '@/util/const'
|
||||
import { Tab, copyTabFilterWorkspaceSnapShot, useGlobalStore } from './useGlobalStore'
|
||||
|
||||
export interface Snapshot {
|
||||
id: string
|
||||
name: string
|
||||
tabs: Tab[]
|
||||
}
|
||||
|
||||
|
||||
|
||||
export const useWorkspeaceSnapshot = defineStore(
|
||||
prefix + 'useWorkspeaceSnapshot',
|
||||
() => {
|
||||
const g = useGlobalStore()
|
||||
const createSnapshot = (name: string): Snapshot => {
|
||||
const tablist = toRaw(g.tabList).map(copyTabFilterWorkspaceSnapShot)
|
||||
return {
|
||||
id: Date.now() + (Math.random() * 100000).toFixed(0),
|
||||
name,
|
||||
tabs: tablist
|
||||
}
|
||||
}
|
||||
const snapshots = ref<Snapshot[]>([])
|
||||
|
||||
watch(() => g.conf?.app_fe_setting, setting => {
|
||||
if (setting) {
|
||||
const keys = Object.keys(setting)
|
||||
const snapshotKeys = keys.filter((v) => v.startsWith('workspace_snapshot_'))
|
||||
const snapshotList = snapshotKeys.map((key) => (setting as any)[key])
|
||||
snapshots.value = snapshotList
|
||||
}
|
||||
}, { immediate: true })
|
||||
|
||||
const addSnapshot = async (snapshot: Snapshot) => {
|
||||
snapshots.value.push(snapshot)
|
||||
await setAppFeSetting(`workspace_snapshot_${snapshot.id}`, snapshot)
|
||||
}
|
||||
|
||||
return {
|
||||
createSnapshot,
|
||||
snapshots,
|
||||
addSnapshot
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
import { t } from '@/i18n'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { reactive } from 'vue'
|
||||
|
||||
import { Modal } from 'ant-design-vue'
|
||||
import { FetchQueue, idKey, typedEventEmitter, type UniqueId} from 'vue3-ts-util'
|
||||
export * from './file'
|
||||
|
||||
|
|
@ -190,4 +192,12 @@ export function unescapeHtml (string: string) {
|
|||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"',)
|
||||
.replace(/'/g, '\'')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const actionConfirm = <T extends (...args: any[]) => void> (fn: T, msg ?: string) => {
|
||||
if (!msg) {
|
||||
msg = t('confirmThisAction')
|
||||
}
|
||||
return (...args: Parameters<T>) => Modal.confirm({ content: msg, onOk: () => fn(...args) })
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue