support tags-translate, search result open in right

pull/31/head
zanllp 2023-04-22 18:44:20 +08:00
parent 916bf448dd
commit 50716ba997
49 changed files with 445 additions and 334 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ BaiduPCS-Go*
*.log
__pycache__
iib.db
tags-translate.csv

View File

@ -8,8 +8,8 @@
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-c8cb069d.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f62089c0.css">
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-935c2795.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-9ee28aec.css">
</head>
<body>

View File

@ -1,6 +1,6 @@
from sqlite3 import Connection, connect
from typing import Dict, List, Optional
from scripts.tool import cwd, get_modified_date, human_readable_size
from scripts.tool import cwd, get_modified_date, human_readable_size, tags_translate
from contextlib import closing
import os
@ -122,6 +122,7 @@ class Tag:
self.type = type
self.count = count
self.id = None
self.display_name = tags_translate.get(name)
def save(self, conn):
with closing(conn.cursor()) as cur:
@ -139,9 +140,7 @@ class Tag:
if row is None:
return None
else:
tag = cls(name=row[1], score=row[2], type=row[3], count=row[4])
tag.id = row[0]
return tag
return cls.from_row(row)
@classmethod
def get_all(cls, conn):
@ -150,9 +149,7 @@ class Tag:
rows = cur.fetchall()
tags: list[Tag] = []
for row in rows:
tag = cls(name=row[1], score=row[2], type=row[3], count=row[4])
tag.id = row[0]
tags.append(tag)
tags.append(cls.from_row(row))
return tags
@classmethod
@ -165,9 +162,13 @@ class Tag:
tag.save(conn)
return tag
else:
tag = cls(name=row[1], score=row[2], type=row[3], count=row[4])
tag.id = row[0]
return tag
return cls.from_row(row)
@classmethod
def from_row(cls, row: tuple):
tag = cls(name=row[1], score=row[2], type=row[3], count=row[4])
tag.id = row[0]
return tag
@classmethod
def create_table(cls, conn):

View File

@ -4,6 +4,7 @@ import platform
import re
import tempfile
import imghdr
from typing import Dict
@ -224,3 +225,14 @@ def parse_generation_parameters(x: str):
lora.append({ "name": model, "value": float(value) })
return res, unique_by(lora, lambda x:x['name']), unique_by(pos_prompt, lambda x:x), unique_by(neg_prompt, lambda x:x)
tags_translate: Dict[str, str] = {}
try:
import codecs
with codecs.open(os.path.join(cwd, 'tags-translate.csv'), "r", "utf-8") as tag:
tags_translate_str = tag.read()
for line in tags_translate_str.splitlines():
en,mapping = line.split(',')
tags_translate[en.strip()] = mapping.strip()
except Exception as e:
print(f"Error reading tags-translate.csv: {e}")

View File

@ -1 +1 @@
import{B as s}from"./button-412d5753.js";import{d as g,u as O,G as C,_ as u,a as m,a3 as y,D as h}from"./index-c8cb069d.js";import{_ as E,a as _}from"./styleChecker-8445ad43.js";var z=E(function e(t){_(this,e),this.error=new Error("unreachable case: ".concat(JSON.stringify(t)))}),P=function(){return{prefixCls:String,size:{type:String}}};const l=g({compatConfig:{MODE:3},name:"AButtonGroup",props:P(),setup:function(t,n){var a=n.slots,o=O("btn-group",t),i=o.prefixCls,v=o.direction,b=C(function(){var r,p=t.size,c="";switch(p){case"large":c="lg";break;case"small":c="sm";break;case"middle":case void 0:break;default:console.warn(new z(p).error)}return r={},u(r,"".concat(i.value),!0),u(r,"".concat(i.value,"-").concat(c),c),u(r,"".concat(i.value,"-rtl"),v.value==="rtl"),r});return function(){var r;return m("div",{class:b.value},[y((r=a.default)===null||r===void 0?void 0:r.call(a))])}}});s.Group=l;s.install=function(e){return e.component(s.name,s),e.component(l.name,l),e};var w={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"};const x=w;function d(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?Object(arguments[t]):{},a=Object.keys(n);typeof Object.getOwnPropertySymbols=="function"&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(o){return Object.getOwnPropertyDescriptor(n,o).enumerable}))),a.forEach(function(o){S(e,o,n[o])})}return e}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=function(t,n){var a=d({},t,n.attrs);return m(h,d({},a,{icon:x}),null)};f.displayName="EyeOutlined";f.inheritAttrs=!1;const $=f;export{$ as E};
import{B as s}from"./button-190f793c.js";import{d as g,u as O,G as C,_ as u,a as m,a3 as y,D as h}from"./index-935c2795.js";import{_ as E,a as _}from"./styleChecker-2a3b80e1.js";var z=E(function e(t){_(this,e),this.error=new Error("unreachable case: ".concat(JSON.stringify(t)))}),P=function(){return{prefixCls:String,size:{type:String}}};const l=g({compatConfig:{MODE:3},name:"AButtonGroup",props:P(),setup:function(t,n){var a=n.slots,o=O("btn-group",t),i=o.prefixCls,v=o.direction,b=C(function(){var r,p=t.size,c="";switch(p){case"large":c="lg";break;case"small":c="sm";break;case"middle":case void 0:break;default:console.warn(new z(p).error)}return r={},u(r,"".concat(i.value),!0),u(r,"".concat(i.value,"-").concat(c),c),u(r,"".concat(i.value,"-rtl"),v.value==="rtl"),r});return function(){var r;return m("div",{class:b.value},[y((r=a.default)===null||r===void 0?void 0:r.call(a))])}}});s.Group=l;s.install=function(e){return e.component(s.name,s),e.component(l.name,l),e};var w={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"};const x=w;function d(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?Object(arguments[t]):{},a=Object.keys(n);typeof Object.getOwnPropertySymbols=="function"&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(o){return Object.getOwnPropertyDescriptor(n,o).enumerable}))),a.forEach(function(o){S(e,o,n[o])})}return e}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=function(t,n){var a=d({},t,n.attrs);return m(h,d({},a,{icon:x}),null)};f.displayName="EyeOutlined";f.inheritAttrs=!1;const $=f;export{$ as E};

3
vue/dist/assets/FileItem-26f47021.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
vue/dist/assets/FileItem-89948011.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{d as z,r as I,J as V,b0 as A,ad as D,K as G,L as N,a,N as i,M as e,ac as _,V as w,U as x,R as B,br as F,S as R,a0 as U}from"./index-935c2795.js";import{u as $,b as E,f as q,d as O,e as Q,i as j,j as H,t as J,M as K,S as L}from"./FileItem-26f47021.js";import{g as P}from"./db-f3cd9ce7.js";import{c as W}from"./copy2clipboard-27655047.js";import"./index-dd56a761.js";import"./styleChecker-2a3b80e1.js";import"./useTaskListStore-fe69b06c.js";import"./EyeOutlined-f4acc3e8.js";import"./button-190f793c.js";const X={class:"hint"},Y=z({__name:"MatchedImageGrid",props:{tabIdx:null,paneIdx:null,selectedTagIds:null,id:null},setup(k){const u=k,p=I(),m=V(new A);D(()=>u.selectedTagIds,async()=>{var t;const{res:r}=m.pushAction(()=>P(u.selectedTagIds));p.value=(await r).sort((d,c)=>Date.parse(c.date)-Date.parse(d.date)),(t=f.value)==null||t.scrollToItem(0)},{immediate:!0});const f=I(),n={tabIdx:-1,target:"local",paneIdx:-1},{stackViewEl:b}=$().toRefs(),{itemSize:g,gridItems:h}=E(n),{showMenuIdx:l}=q(),{showGenInfo:o,imageGenInfo:v,q:y,onContextMenuClick:M}=O(n,{openNext:F});return Q(n),(r,t)=>{const d=R,c=K,C=L;return G(),N("div",{class:"container",ref_key:"stackViewEl",ref:b},[a(C,{size:"large",spinning:!m.isIdle},{default:i(()=>[a(c,{visible:e(o),"onUpdate:visible":t[1]||(t[1]=s=>_(o)?o.value=s:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=s=>o.value=!1)},{cancelText:i(()=>[]),default:i(()=>[a(d,{active:"",loading:!e(y).isIdle},{default:i(()=>[w("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=s=>e(W)(e(v),"copied"))},[w("div",X,x(r.$t("doubleClickToCopy")),1),B(" "+x(e(v)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),a(e(j),{ref_key:"scroller",ref:f,class:"file-list",items:p.value||[],"item-size":e(g).first,"key-field":"fullpath","item-secondary-size":e(g).second,gridItems:e(h)},{default:i(({item:s,index:S})=>[a(H,{idx:S,file:s,"show-menu-idx":e(l),"onUpdate:showMenuIdx":t[3]||(t[3]=T=>_(l)?l.value=T:null),"full-screen-preview-image-url":e(J)(s),onContextMenuClick:e(M)},null,8,["idx","file","show-menu-idx","full-screen-preview-image-url","onContextMenuClick"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])]),_:1},8,["spinning"])],512)}}});const re=U(Y,[["__scopeId","data-v-efd1f8e1"]]);export{re as default};

View File

@ -0,0 +1 @@
.container .file-list[data-v-efd1f8e1]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%}

View File

@ -0,0 +1 @@
.container[data-v-2e81dd00]{height:var(--pane-max-height);overflow:auto}.container .tag-list[data-v-2e81dd00]{list-style:none;padding:0}.container .tag-list .tag[data-v-2e81dd00]{border:2px solid var(--zp-secondary);color:var(--zp-secondary);border-radius:999px;padding:2px 8px;margin:4px;display:inline-block;cursor:pointer}.container .tag-list .tag.selected[data-v-2e81dd00]{color:var(--primary-color);border:2px solid var(--primary-color)}

View File

@ -1 +0,0 @@
.container[data-v-de62d885]{height:100%;overflow:auto}.container .file-list[data-v-de62d885]{list-style:none;padding:8px;height:50vh;overflow:auto;width:100%}.container .tag-list[data-v-de62d885]{list-style:none;padding:0;max-height:50vh;overflow:auto}.container .tag-list .tag[data-v-de62d885]{border:2px solid var(--zp-secondary);color:var(--zp-secondary);border-radius:999px;padding:2px 8px;margin:4px;display:inline-block;cursor:pointer}.container .tag-list .tag.selected[data-v-de62d885]{color:var(--primary-color);border:2px solid var(--primary-color)}

View File

@ -1 +0,0 @@
import{bH as w,d as E,J as G,b6 as Q,r as y,G as R,y as j,K as o,L as m,a as p,N as i,M as e,V as k,U as d,R as r,aj as B,W as z,O as h,X as H,Y as L,ax as J,Q as A,bw as K,S as W,a0 as X}from"./index-c8cb069d.js";import{u as Y,b as P,f as Z,d as ee,i as te,h as ae,M as se}from"./FileItem-8299ccce.js";import{c as oe}from"./copy2clipboard-1c1b6705.js";import{B as ne}from"./button-412d5753.js";import"./index-7122bb4c.js";import"./styleChecker-8445ad43.js";import"./useTaskListStore-be77fcbc.js";import"./EyeOutlined-921aebd6.js";const T=async()=>(await w.get("/db/basic_info")).data,ie=async()=>{await w.post("/db/update_image_data",{},{timeout:1/0})},le=async _=>(await w.get("/db/match_images_by_tags",{params:{tag_ids:_.join()}})).data,ce={class:"hint"},de={class:"tag-list"},re=["onClick"],ue=E({__name:"TagSearch",setup(_){const l=G(new Q),s=y(),n=y(new Set),x=R(()=>s.value?s.value.tags.slice().sort((c,a)=>a.count-c.count):[]),I=y();j(async()=>{s.value=await T(),console.log(s,x)});const V=async()=>{l.pushAction(async()=>{await ie(),s.value=await T()})},b={tabIdx:-1,target:"local",paneIdx:-1},{stackViewEl:N}=Y().toRefs(),{itemSize:v,gridItems:f}=P(b),{showMenuIdx:g}=Z(),{showGenInfo:u,imageGenInfo:C,q:D,onContextMenuClick:$}=ee(b,{openNext:K}),F=async()=>{console.log(v.value,f.value);const{res:c}=l.pushAction(()=>le(Array.from(n.value)));I.value=await c};return(c,a)=>{const O=W,U=se,M=ne;return o(),m("div",{class:"container",ref_key:"stackViewEl",ref:N},[p(U,{visible:e(u),"onUpdate:visible":a[1]||(a[1]=t=>B(u)?u.value=t:null),width:"70vw","mask-closable":"",onOk:a[2]||(a[2]=t=>u.value=!1)},{cancelText:i(()=>[]),default:i(()=>[p(O,{active:"",loading:!e(D).isIdle},{default:i(()=>[k("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:a[0]||(a[0]=t=>e(oe)(e(C),"copied"))},[k("div",ce,d(c.$t("doubleClickToCopy")),1),r(" "+d(e(C)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),s.value?(o(),m(z,{key:0},[s.value.expired||!s.value.img_count?(o(),h(M,{key:0,onClick:V,loading:!l.isIdle,type:"primary"},{default:i(()=>[r(d(s.value.img_count===0?"gen idx":"updat index"),1)]),_:1},8,["loading"])):(o(),h(M,{key:1,type:"primary",onClick:F,loading:!l.isIdle},{default:i(()=>[r("search")]),_:1},8,["loading"])),k("ul",de,[(o(!0),m(z,null,H(e(x),t=>(o(),m("li",{key:t.id,class:L(["tag",{selected:n.value.has(t.id)}]),onClick:S=>n.value.has(t.id)?n.value.delete(t.id):n.value.add(t.id)},[n.value.has(t.id)?(o(),h(e(J),{key:0})):A("",!0),r(" "+d(t.name),1)],10,re))),128))])],64)):A("",!0),r(" "+d(e(f))+" ",1),p(e(ae),{class:"file-list",items:I.value||[],"item-size":e(v).first,"key-field":"fullpath","item-secondary-size":e(v).second,gridItems:e(f)},{default:i(({item:t,index:S})=>[p(te,{idx:S,file:t,"show-menu-idx":e(g),"onUpdate:showMenuIdx":a[3]||(a[3]=q=>B(g)?g.value=q:null),onContextMenuClick:e($)},null,8,["idx","file","show-menu-idx","onContextMenuClick"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])],512)}}});const he=X(ue,[["__scopeId","data-v-de62d885"]]);export{he as default};

1
vue/dist/assets/TagSearch-e859889b.js vendored Normal file
View File

@ -0,0 +1 @@
import{d as w,F as b,J as V,b0 as N,r as _,G as T,aV as q,y as A,K as s,L as o,Q as c,W as v,V as y,a as D,M as l,ah as F,O as d,N as h,R as u,U as g,X as G,Y as M,aq as U,a0 as $}from"./index-935c2795.js";/* empty css */import{a as f,u as L}from"./db-f3cd9ce7.js";import{B as O}from"./button-190f793c.js";const Q={class:"container"},R={class:"tag-list"},z=["onClick"],E=w({__name:"TagSearch",props:{tabIdx:null,paneIdx:null},setup(k){const x=k,I=b(),i=V(new N),a=_(),t=_(new Set),r=T(()=>a.value?a.value.tags.slice().sort((p,n)=>n.count-p.count):[]),C=q();A(async()=>{a.value=await f()});const S=async()=>{i.pushAction(async()=>{await L(),a.value=await f()})},B=()=>{I.openTagSearchMatchedImageGridInRight(x.tabIdx,C,Array.from(t.value))};return(p,n)=>{const m=O;return s(),o("div",Q,[c("",!0),a.value?(s(),o(v,{key:1},[y("div",null,[D(l(F),{conv:{value:e=>e.id,text:e=>e.display_name?`${e.display_name} : ${e.name}`:e.name},mode:"multiple",style:{width:"100%"},options:l(r),value:Array.from(t.value),"onUpdate:value":n[0]||(n[0]=e=>t.value=new Set(e))},null,8,["conv","options","value"])]),a.value.expired||!a.value.img_count?(s(),d(m,{key:0,onClick:S,loading:!i.isIdle,type:"primary"},{default:h(()=>[u(g(a.value.img_count===0?"gen idx":"updat index"),1)]),_:1},8,["loading"])):(s(),d(m,{key:1,type:"primary",onClick:B,loading:!i.isIdle},{default:h(()=>[u("search")]),_:1},8,["loading"])),y("ul",R,[(s(!0),o(v,null,G(l(r),e=>(s(),o("li",{key:e.id,class:M(["tag",{selected:t.value.has(e.id)}]),onClick:J=>t.value.has(e.id)?t.value.delete(e.id):t.value.add(e.id)},[t.value.has(e.id)?(s(),d(l(U),{key:0})):c("",!0),u(" "+g(e.name),1)],10,z))),128))])],64)):c("",!0)])}}});const j=$(E,[["__scopeId","data-v-2e81dd00"]]);export{j as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{b as s}from"./index-7122bb4c.js";import{cq as t,aA as a}from"./index-c8cb069d.js";function r(e,o){return e&&e.length?t(e,s(o)):[]}const i=(e,o)=>(a.success({content:o??`已复制内容 "${e}" 到粘贴板`}),navigator.clipboard.writeText(e));export{i as c,r as u};
import{b as s}from"./index-dd56a761.js";import{cq as t,at as a}from"./index-935c2795.js";function r(e,o){return e&&e.length?t(e,s(o)):[]}const i=(e,o)=>(a.success({content:o??`已复制内容 "${e}" 到粘贴板`}),navigator.clipboard.writeText(e));export{i as c,r as u};

1
vue/dist/assets/db-f3cd9ce7.js vendored Normal file
View File

@ -0,0 +1 @@
import{c1 as a}from"./index-935c2795.js";const n=async()=>(await a.get("/db/basic_info")).data,i=async()=>{await a.post("/db/update_image_data",{},{timeout:1/0})},o=async t=>(await a.get("/db/match_images_by_tags",{params:{tag_ids:t.join()}})).data;export{n as a,o as g,i as u};

View File

@ -1 +1 @@
.ant-collapse{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";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:2px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 2px 2px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;padding:12px 16px;color:#000000d9;line-height:1.5715;cursor:pointer;transition:all .3s,visibility 0s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{display:inline-block;margin-right:12px;font-size:12px;vertical-align:-1px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-left:auto}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{cursor:pointer}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{position:absolute;top:50%;right:16px;left:auto;margin:0;transform:translateY(-50%)}.ant-collapse-content{color:#000000d9;background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-hidden{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 2px 2px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:transparent;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:#00000040;cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{margin-right:0;margin-left:12px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-right:auto;margin-left:0}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}.container[data-v-086c4ef8]{padding:20px;background-color:var(--zp-secondary-background);height:100%;overflow:auto}.header[data-v-086c4ef8]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.header h1[data-v-086c4ef8]{font-size:28px;font-weight:700;color:var(--zp-primary)}.last-record[data-v-086c4ef8]{margin-left:8px;font-size:14px;color:var(--zp-tertiary)}.last-record a[data-v-086c4ef8]{text-decoration:none;color:var(--zp-tertiary)}.last-record a[data-v-086c4ef8]:hover{color:var(--zp-primary)}.content[data-v-086c4ef8]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));grid-gap:20px}.quick-start[data-v-086c4ef8]{background-color:var(--zp-primary-background);border-radius:8px;box-shadow:0 1px 2px #0000001a;padding:20px}.quick-start ul[data-v-086c4ef8]{list-style:none;padding:4px}.quick-start h2[data-v-086c4ef8]{margin-top:0;margin-bottom:20px;font-size:20px;font-weight:700;color:var(--zp-primary)}.quick-start__item[data-v-086c4ef8]{margin-bottom:10px;padding:4px 8px;display:flex;align-items:center}.quick-start__item[data-v-086c4ef8]:hover{background:var(--zp-secondary-background);border-radius:4px;color:var(--primary-color);cursor:pointer}.quick-start__text[data-v-086c4ef8]{flex:1;font-size:16px}.quick-start__icon[data-v-086c4ef8]{margin-right:8px}
.ant-collapse{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";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:2px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 2px 2px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;padding:12px 16px;color:#000000d9;line-height:1.5715;cursor:pointer;transition:all .3s,visibility 0s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{display:inline-block;margin-right:12px;font-size:12px;vertical-align:-1px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-left:auto}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{cursor:pointer}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{position:absolute;top:50%;right:16px;left:auto;margin:0;transform:translateY(-50%)}.ant-collapse-content{color:#000000d9;background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-hidden{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 2px 2px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:transparent;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:#00000040;cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{margin-right:0;margin-left:12px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-right:auto;margin-left:0}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}.container[data-v-4b8dd4f2]{padding:20px;background-color:var(--zp-secondary-background);height:100%;overflow:auto}.header[data-v-4b8dd4f2]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.header h1[data-v-4b8dd4f2]{font-size:28px;font-weight:700;color:var(--zp-primary)}.last-record[data-v-4b8dd4f2]{margin-left:8px;font-size:14px;color:var(--zp-tertiary)}.last-record a[data-v-4b8dd4f2]{text-decoration:none;color:var(--zp-tertiary)}.last-record a[data-v-4b8dd4f2]:hover{color:var(--zp-primary)}.content[data-v-4b8dd4f2]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));grid-gap:20px}.quick-start[data-v-4b8dd4f2]{background-color:var(--zp-primary-background);border-radius:8px;box-shadow:0 1px 2px #0000001a;padding:20px}.quick-start ul[data-v-4b8dd4f2]{list-style:none;padding:4px}.quick-start h2[data-v-4b8dd4f2]{margin-top:0;margin-bottom:20px;font-size:20px;font-weight:700;color:var(--zp-primary)}.quick-start__item[data-v-4b8dd4f2]{margin-bottom:10px;padding:4px 8px;display:flex;align-items:center}.quick-start__item[data-v-4b8dd4f2]:hover{background:var(--zp-secondary-background);border-radius:4px;color:var(--primary-color);cursor:pointer}.quick-start__text[data-v-4b8dd4f2]{flex:1;font-size:16px}.quick-start__icon[data-v-4b8dd4f2]{margin-right:8px}

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

View File

@ -1 +1 @@
import{bx as D,bE as K,r as _,y as F,ab as V,G as v,bg as W,t as I,d as E,u as T,bF as A,a5 as j,A as k,bG as G,c as $,_ as s,a as B,h as R}from"./index-c8cb069d.js";import{g as U,t as q,d as H}from"./styleChecker-8445ad43.js";var J="[object Object]",Q=Function.prototype,X=Object.prototype,L=Q.toString,Y=X.hasOwnProperty,Z=L.call(Object);function ie(n){if(!D(n)||K(n)!=J)return!1;var e=U(n);if(e===null)return!0;var a=Y.call(e,"constructor")&&e.constructor;return typeof a=="function"&&a instanceof a&&L.call(a)==Z}function se(n,e,a){var p=-1,i=n.length;e<0&&(e=-e>i?0:i+e),a=a>i?i:a,a<0&&(a+=i),i=e>a?0:a-e>>>0,e>>>=0;for(var f=Array(i);++p<i;)f[p]=n[p+e];return f}function le(n){var e=q(n),a=e%1;return e===e?a?e-a:e:0}const z=function(){var n=_(!1);return F(function(){n.value=H()}),n};var M=Symbol("rowContextKey"),ee=function(e){W(M,e)},te=function(){return V(M,{gutter:v(function(){}),wrap:v(function(){}),supportFlexGap:v(function(){})})};I("top","middle","bottom","stretch");I("start","end","center","space-around","space-between");var re=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},ne=E({compatConfig:{MODE:3},name:"ARow",props:re(),setup:function(e,a){var p=a.slots,i=T("row",e),f=i.prefixCls,O=i.direction,S,x=_({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),w=z();F(function(){S=A.subscribe(function(t){var r=e.gutter||0;(!Array.isArray(r)&&j(r)==="object"||Array.isArray(r)&&(j(r[0])==="object"||j(r[1])==="object"))&&(x.value=t)})}),k(function(){A.unsubscribe(S)});var h=v(function(){var t=[0,0],r=e.gutter,o=r===void 0?0:r,l=Array.isArray(o)?o:[o,0];return l.forEach(function(d,y){if(j(d)==="object")for(var u=0;u<G.length;u++){var b=G[u];if(x.value[b]&&d[b]!==void 0){t[y]=d[b];break}}else t[y]=d||0}),t});ee({gutter:h,supportFlexGap:w,wrap:v(function(){return e.wrap})});var N=v(function(){var t;return $(f.value,(t={},s(t,"".concat(f.value,"-no-wrap"),e.wrap===!1),s(t,"".concat(f.value,"-").concat(e.justify),e.justify),s(t,"".concat(f.value,"-").concat(e.align),e.align),s(t,"".concat(f.value,"-rtl"),O.value==="rtl"),t))}),P=v(function(){var t=h.value,r={},o=t[0]>0?"".concat(t[0]/-2,"px"):void 0,l=t[1]>0?"".concat(t[1]/-2,"px"):void 0;return o&&(r.marginLeft=o,r.marginRight=o),w.value?r.rowGap="".concat(t[1],"px"):l&&(r.marginTop=l,r.marginBottom=l),r});return function(){var t;return B("div",{class:N.value,style:P.value},[(t=p.default)===null||t===void 0?void 0:t.call(p)])}}});const fe=ne;function ae(n){return typeof n=="number"?"".concat(n," ").concat(n," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(n)?"0 0 ".concat(n):n}var oe=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 de=E({compatConfig:{MODE:3},name:"ACol",props:oe(),setup:function(e,a){var p=a.slots,i=te(),f=i.gutter,O=i.supportFlexGap,S=i.wrap,x=T("col",e),w=x.prefixCls,h=x.direction,N=v(function(){var t,r=e.span,o=e.order,l=e.offset,d=e.push,y=e.pull,u=w.value,b={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(m){var g,c={},C=e[m];typeof C=="number"?c.span=C:j(C)==="object"&&(c=C||{}),b=R(R({},b),{},(g={},s(g,"".concat(u,"-").concat(m,"-").concat(c.span),c.span!==void 0),s(g,"".concat(u,"-").concat(m,"-order-").concat(c.order),c.order||c.order===0),s(g,"".concat(u,"-").concat(m,"-offset-").concat(c.offset),c.offset||c.offset===0),s(g,"".concat(u,"-").concat(m,"-push-").concat(c.push),c.push||c.push===0),s(g,"".concat(u,"-").concat(m,"-pull-").concat(c.pull),c.pull||c.pull===0),s(g,"".concat(u,"-rtl"),h.value==="rtl"),g))}),$(u,(t={},s(t,"".concat(u,"-").concat(r),r!==void 0),s(t,"".concat(u,"-order-").concat(o),o),s(t,"".concat(u,"-offset-").concat(l),l),s(t,"".concat(u,"-push-").concat(d),d),s(t,"".concat(u,"-pull-").concat(y),y),t),b)}),P=v(function(){var t=e.flex,r=f.value,o={};if(r&&r[0]>0){var l="".concat(r[0]/2,"px");o.paddingLeft=l,o.paddingRight=l}if(r&&r[1]>0&&!O.value){var d="".concat(r[1]/2,"px");o.paddingTop=d,o.paddingBottom=d}return t&&(o.flex=ae(t),S.value===!1&&!o.minWidth&&(o.minWidth=0)),o});return function(){var t;return B("div",{class:N.value,style:P.value},[(t=p.default)===null||t===void 0?void 0:t.call(p)])}}});export{de as C,fe as R,se as b,ie as i,le as t};
import{bs as D,bA as K,r as G,y as F,b4 as V,G as v,bb as W,t as I,d as B,u as T,bB as P,a5 as j,A as k,bC as R,c as $,_ as s,a as E,h as _}from"./index-935c2795.js";import{g as U,t as q,d as H}from"./styleChecker-2a3b80e1.js";var J="[object Object]",Q=Function.prototype,X=Object.prototype,L=Q.toString,Y=X.hasOwnProperty,Z=L.call(Object);function ie(n){if(!D(n)||K(n)!=J)return!1;var e=U(n);if(e===null)return!0;var a=Y.call(e,"constructor")&&e.constructor;return typeof a=="function"&&a instanceof a&&L.call(a)==Z}function se(n,e,a){var p=-1,i=n.length;e<0&&(e=-e>i?0:i+e),a=a>i?i:a,a<0&&(a+=i),i=e>a?0:a-e>>>0,e>>>=0;for(var f=Array(i);++p<i;)f[p]=n[p+e];return f}function le(n){var e=q(n),a=e%1;return e===e?a?e-a:e:0}const z=function(){var n=G(!1);return F(function(){n.value=H()}),n};var M=Symbol("rowContextKey"),ee=function(e){W(M,e)},te=function(){return V(M,{gutter:v(function(){}),wrap:v(function(){}),supportFlexGap:v(function(){})})};I("top","middle","bottom","stretch");I("start","end","center","space-around","space-between");var re=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},ne=B({compatConfig:{MODE:3},name:"ARow",props:re(),setup:function(e,a){var p=a.slots,i=T("row",e),f=i.prefixCls,O=i.direction,S,x=G({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),w=z();F(function(){S=P.subscribe(function(t){var r=e.gutter||0;(!Array.isArray(r)&&j(r)==="object"||Array.isArray(r)&&(j(r[0])==="object"||j(r[1])==="object"))&&(x.value=t)})}),k(function(){P.unsubscribe(S)});var h=v(function(){var t=[0,0],r=e.gutter,o=r===void 0?0:r,l=Array.isArray(o)?o:[o,0];return l.forEach(function(d,y){if(j(d)==="object")for(var u=0;u<R.length;u++){var g=R[u];if(x.value[g]&&d[g]!==void 0){t[y]=d[g];break}}else t[y]=d||0}),t});ee({gutter:h,supportFlexGap:w,wrap:v(function(){return e.wrap})});var N=v(function(){var t;return $(f.value,(t={},s(t,"".concat(f.value,"-no-wrap"),e.wrap===!1),s(t,"".concat(f.value,"-").concat(e.justify),e.justify),s(t,"".concat(f.value,"-").concat(e.align),e.align),s(t,"".concat(f.value,"-rtl"),O.value==="rtl"),t))}),A=v(function(){var t=h.value,r={},o=t[0]>0?"".concat(t[0]/-2,"px"):void 0,l=t[1]>0?"".concat(t[1]/-2,"px"):void 0;return o&&(r.marginLeft=o,r.marginRight=o),w.value?r.rowGap="".concat(t[1],"px"):l&&(r.marginTop=l,r.marginBottom=l),r});return function(){var t;return E("div",{class:N.value,style:A.value},[(t=p.default)===null||t===void 0?void 0:t.call(p)])}}});const fe=ne;function ae(n){return typeof n=="number"?"".concat(n," ").concat(n," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(n)?"0 0 ".concat(n):n}var oe=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 de=B({compatConfig:{MODE:3},name:"ACol",props:oe(),setup:function(e,a){var p=a.slots,i=te(),f=i.gutter,O=i.supportFlexGap,S=i.wrap,x=T("col",e),w=x.prefixCls,h=x.direction,N=v(function(){var t,r=e.span,o=e.order,l=e.offset,d=e.push,y=e.pull,u=w.value,g={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(m){var b,c={},C=e[m];typeof C=="number"?c.span=C:j(C)==="object"&&(c=C||{}),g=_(_({},g),{},(b={},s(b,"".concat(u,"-").concat(m,"-").concat(c.span),c.span!==void 0),s(b,"".concat(u,"-").concat(m,"-order-").concat(c.order),c.order||c.order===0),s(b,"".concat(u,"-").concat(m,"-offset-").concat(c.offset),c.offset||c.offset===0),s(b,"".concat(u,"-").concat(m,"-push-").concat(c.push),c.push||c.push===0),s(b,"".concat(u,"-").concat(m,"-pull-").concat(c.pull),c.pull||c.pull===0),s(b,"".concat(u,"-rtl"),h.value==="rtl"),b))}),$(u,(t={},s(t,"".concat(u,"-").concat(r),r!==void 0),s(t,"".concat(u,"-order-").concat(o),o),s(t,"".concat(u,"-offset-").concat(l),l),s(t,"".concat(u,"-push-").concat(d),d),s(t,"".concat(u,"-pull-").concat(y),y),t),g)}),A=v(function(){var t=e.flex,r=f.value,o={};if(r&&r[0]>0){var l="".concat(r[0]/2,"px");o.paddingLeft=l,o.paddingRight=l}if(r&&r[1]>0&&!O.value){var d="".concat(r[1]/2,"px");o.paddingTop=d,o.paddingBottom=d}return t&&(o.flex=ae(t),S.value===!1&&!o.minWidth&&(o.minWidth=0)),o});return function(){var t;return E("div",{class:N.value,style:A.value},[(t=p.default)===null||t===void 0?void 0:t.call(p)])}}});export{de as C,fe as R,se as b,ie as i,le 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

File diff suppressed because one or more lines are too long

1
vue/dist/assets/index-d623d990.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{u as p}from"./useTaskListStore-be77fcbc.js";import{d as u,r as d,G as g,ak as f,ad as m,K as t,L as s,V as l,W as k,X as L,U as y,M as D,a0 as v}from"./index-c8cb069d.js";const x={class:"container"},h=u({__name:"logDetail",props:{logDetailId:null},setup(r){const n=r,c=p(),a=d(),o=g(()=>c.taskLogMap.get(n.logDetailId));return f(o,async()=>{await m();const e=a.value;e&&(e.scrollTop=e.scrollHeight)},{deep:!0}),(e,B)=>(t(),s("div",x,[l("ul",{class:"list",ref_key:"logListEl",ref:a},[(t(!0),s(k,null,L(D(o),(i,_)=>(t(),s("li",{key:_},[l("pre",null,y(i.log),1)]))),128))],512)]))}});const T=v(h,[["__scopeId","data-v-59148842"]]);export{T as default};
import{u as p}from"./useTaskListStore-fe69b06c.js";import{d as u,r as d,G as g,ad as f,aH as m,K as t,L as s,V as l,W as k,X as L,U as y,M as D,a0 as v}from"./index-935c2795.js";const x={class:"container"},h=u({__name:"logDetail",props:{logDetailId:null},setup(r){const n=r,c=p(),a=d(),o=g(()=>c.taskLogMap.get(n.logDetailId));return f(o,async()=>{await m();const e=a.value;e&&(e.scrollTop=e.scrollHeight)},{deep:!0}),(e,B)=>(t(),s("div",x,[l("ul",{class:"list",ref_key:"logListEl",ref:a},[(t(!0),s(k,null,L(D(o),(i,_)=>(t(),s("li",{key:_},[l("pre",null,y(i.log),1)]))),128))],512)]))}});const T=v(h,[["__scopeId","data-v-59148842"]]);export{T as default};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.uninstalled-hint[data-v-339527fa]{margin:256px auto;display:flex;flex-flow:column;justify-content:center;align-items:center}.uninstalled-hint>*[data-v-339527fa]{margin:16px;text-align:center}.preview-switch[data-v-339527fa]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-339527fa]{margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-339527fa]{opacity:0;pointer-events:none;cursor:none}.container[data-v-339527fa]{height:100%;background:var(--zp-secondary-background)}.location-bar[data-v-339527fa]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}.location-bar .actions[data-v-339527fa]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-339527fa]{margin-left:8px}.view[data-v-339527fa]{padding:8px;height:calc(100vh - 96px)}.view .file-list[data-v-339527fa]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-339527fa]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}

File diff suppressed because one or more lines are too long

1
vue/dist/assets/stackView-ebd11e40.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{cL as f,cM as i,cN as l,bM as d}from"./index-c8cb069d.js";var u=f(Object.getPrototypeOf,Object);const y=u;function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,i(n.key),n)}}function b(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e){return function(t){return t==null?void 0:t[e]}}var c=1/0,p=17976931348623157e292;function h(e){if(!e)return e===0?e:0;if(e=l(e),e===c||e===-c){var t=e<0?-1:1;return t*p}return e===e?e:0}var m=function(){return d()&&window.document.documentElement},a,x=function(){if(!m())return!1;if(a!==void 0)return a;var t=document.createElement("div");return t.style.display="flex",t.style.flexDirection="column",t.style.rowGap="1px",t.appendChild(document.createElement("div")),t.appendChild(document.createElement("div")),document.body.appendChild(t),a=t.scrollHeight===1,document.body.removeChild(t),a};export{b as _,E as a,g as b,m as c,x as d,y as g,h as t};
import{cL as f,cM as i,cN as l,bH as d}from"./index-935c2795.js";var u=f(Object.getPrototypeOf,Object);const y=u;function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,i(n.key),n)}}function b(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e){return function(t){return t==null?void 0:t[e]}}var c=1/0,p=17976931348623157e292;function h(e){if(!e)return e===0?e:0;if(e=l(e),e===c||e===-c){var t=e<0?-1:1;return t*p}return e===e?e:0}var m=function(){return d()&&window.document.documentElement},a,x=function(){if(!m())return!1;if(a!==void 0)return a;var t=document.createElement("div");return t.style.display="flex",t.style.flexDirection="column",t.style.rowGap="1px",t.appendChild(document.createElement("div")),t.appendChild(document.createElement("div")),document.body.appendChild(t),a=t.scrollHeight===1,document.body.removeChild(t),a};export{b as _,E as a,g as b,m as c,x as d,y as g,h as t};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{cQ as r,r as e,J as t,b6 as i,cR as d}from"./index-c8cb069d.js";const v=r("useTaskListStore",()=>{const a=e(new Map),n=t(new i),u=e(3),o=e([]),c=t([]),l=e(-1),s=e(null);return{checkBaiduyunInstalled:async()=>(s.value===null&&(s.value=d()),s.value),baiduyunInstalled:s,pollInterval:u,taskLogMap:a,queue:n,tasks:o,showDirAutoCompletedIdx:l,pendingBaiduyunTaskQueue:c}},{persist:{paths:["pollInterval","tasks"],key:"useTaskListStore-v0.0.1"}});export{v as u};
import{cO as r,r as e,J as t,b0 as i,cP as d}from"./index-935c2795.js";const v=r("useTaskListStore",()=>{const a=e(new Map),n=t(new i),u=e(3),o=e([]),c=t([]),l=e(-1),s=e(null);return{checkBaiduyunInstalled:async()=>(s.value===null&&(s.value=d()),s.value),baiduyunInstalled:s,pollInterval:u,taskLogMap:a,queue:n,tasks:o,showDirAutoCompletedIdx:l,pendingBaiduyunTaskQueue:c}},{persist:{paths:["pollInterval","tasks"],key:"useTaskListStore-v0.0.1"}});export{v as u};

4
vue/dist/index.html vendored
View File

@ -7,8 +7,8 @@
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-c8cb069d.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-f62089c0.css">
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-935c2795.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-9ee28aec.css">
</head>
<body>

View File

@ -4,6 +4,7 @@ import { axiosInst } from './index'
export interface Tag {
name: string
id: number
display_name: string | null
type: string
count: number
}

View File

@ -1,213 +1,212 @@
import { createI18n } from 'vue-i18n'
const messages = {
zh: {
errorOccurred: '发生了个错误',
logoutSuccess: '登出成功',
useThumbnailPreview: '使用缩略图预览',
pollingInterval: '轮询间隔',
smallerIntervalMeansMoreNetworkTraffic: '越小对网络压力越大',
gridThumbnailWidth: '网格缩略图宽度',
largeGridThumbnailWidth: '大尺寸网格缩略图宽度',
pause: '暂停',
start: '开始',
waitingUploadCount: '等待上传数量',
uploadFailureCount: '上传失败数量',
completedCount: '已完成数量',
realTimeLog: '实时日志',
tip: '提示',
clickToViewLogs:
'点击下面查看具体日志若有日志错误内包含名字不合规可尝试在sd-webui的设置页换一种图像文件名格式例如[datetime<%Y-%m-%d %H-%M-%S>]',
startedAt: '开始于:',
sortByDateAscending: '日期升序',
sortByDateDescending: '日期降序',
sortByNameAscending: '名称升序',
sortByNameDescending: '名称降序',
sortBySizeAscending: '大小升序',
sortBySizeDescending: '大小降序',
inputAddressAndPressEnter: '输入地址回车',
go: '前往',
unknownError: '未知错误',
loadingNextFolder: '即将加载下一个文件夹的文件',
moveFailedCheckPath: '移动失败,检查你的路径输入',
detailList: '详情列表',
previewGrid: '预览网格',
largePreviewGrid: '大尺寸预览网格',
sortBy: '按照',
moveSelectedFilesTo: '下列文件移动至',
confirm: '确定?',
upload: '上传',
download: '下载',
local: '本地',
cloud: '云盘',
confirmCreateTask: '确定创建{type}任务。{more}',
sendImageFailed: '发送图像失败请携带console的错误消息找开发者',
confirmDelete: '确认删除?',
deleteSuccess: '删除成功',
dependenciesNotInstalled: '尚未安装依赖,当前不可用',
login: '登录',
doubleClickToCopy: '双击复制',
root: '根',
drive: '盘',
refresh: '刷新',
quickMove: '快速移动',
more: '更多',
viewMode: '查看模式',
sortingMethod: '排序方法',
copyPath: '复制路径',
deleteSelected: '删除选中',
previewInNewWindow: '在新窗口预览(如果浏览器处理不了会下载,大文件的话谨慎)',
downloadDirectly: '直接下载(大文件的话谨慎)',
copySourceFilePreviewLink: '复制源文件预览链接',
viewGenerationInfo: '查看生成信息(prompt等)',
sendToTxt2img: '发送到文生图',
sendToImg2img: '发送到图生图',
sendToInpaint: '发送到局部重绘',
sendToExtraFeatures: '发送到附加功能',
loadNextPage: '加载下一页',
autoUpload: '自动上传',
localFile: '本地文件',
baiduCloud: '百度云',
taskRecord: '任务记录',
globalSettings: '全局设置',
onlyOneTaskRecordAllowed: '任务记录有且只能有一个如果特殊需求请前往仓库提issue',
welcome: '欢迎',
openInNewWindow: '在新页面打开',
restoreLastRecord: '还原上次记录',
launch: '启动',
walkMode: '使用 Walk 模式浏览图片',
launchFromQuickMove: '从快速移动启动',
recent: '最近',
emptyStartPage: '空启动页',
deleteNotAllowedWithOnePaneLeft: '在仅剩一个pane的情况下不允许删除!!!',
t2i: '文生图',
i2i: '图生图',
saveButtonSavesTo: '使用“保存”按钮保存图像的目录',
extra: '附加',
gridImage: '宫格图',
'i2i-grid': '图生图网格',
image: '图像',
't2i-grid': '文生图宫格',
workingFolder: '工作文件夹',
lang: '语言',
langChangeReload: '重新加载: 一些变化可能需要在重新加载后生效',
hypernetworks: '超网络模型',
openOnTheRight: '在右边打开',
openInNewTab: '在新标签打开',
loginPrompt: '这个功能要求你先使用BDUSS登录到百度云盘。',
openWithWalkMode: '使用 Walk 模式打开',
longPressOpenContextMenu: '支持使用长按打开右键菜单',
baiduNetdiskCollapseTitle: '百度云盘相关功能(仅预览图片无需打开)',
clickHere2install: '点此安装'
},
en: {
errorOccurred: 'An error occurred',
logoutSuccess: 'Logged out successfully',
useThumbnailPreview: 'Use thumbnail preview',
pollingInterval: 'Polling interval',
smallerIntervalMeansMoreNetworkTraffic: 'Smaller interval means more network traffic',
gridThumbnailWidth: 'Grid thumbnail width',
largeGridThumbnailWidth: 'Large grid thumbnail width',
pause: 'Pause',
start: 'Start',
waitingUploadCount: 'Waiting upload count',
uploadFailureCount: 'Upload failure count',
completedCount: 'Completed count',
realTimeLog: 'Real-time log',
tip: 'Tip',
clickToViewLogs:
'Click below to view specific logs. If there are naming errors, try changing the image filename format on the sd-webui settings page, such as [datetime<%Y-%m-%d %H-%M-%S>]',
startedAt: 'Started at: ',
sortByDateAscending: 'Date ascending',
sortByDateDescending: 'Date descending',
sortByNameAscending: 'Name ascending',
sortByNameDescending: 'Name descending',
sortBySizeAscending: 'Size ascending',
sortBySizeDescending: 'Size descending',
inputAddressAndPressEnter: 'Input address and press Enter',
go: 'Go',
unknownError: 'Unknown error',
loadingNextFolder: 'Loading files from the next folder',
moveFailedCheckPath: 'Move failed. Check your path input.',
detailList: 'Detail list',
previewGrid: 'Preview grid',
largePreviewGrid: 'Large preview grid',
sortBy: 'Sort by',
moveSelectedFilesTo: 'Move selected files to',
confirm: 'Confirm?',
upload: 'Upload',
download: 'Download',
local: 'Local',
cloud: 'Cloud',
confirmCreateTask: 'Confirm to create {type} task. {more}',
sendImageFailed:
'Failed to send image. Please contact the developer with the error message from the console.',
confirmDelete: 'Are you sure you want to delete?',
deleteSuccess: 'Deleted successfully',
dependenciesNotInstalled: 'Dependencies not installed. Currently unavailable.',
login: 'Login',
doubleClickToCopy: 'Double-click to copy',
root: 'Root',
drive: ' drive',
refresh: 'Refresh',
quickMove: 'Quick move',
more: 'More',
viewMode: 'View mode',
sortingMethod: 'Sorting method',
copyPath: 'Copy path',
deleteSelected: 'Delete selected',
previewInNewWindow:
'Open in new window (will download if browser cannot handle it, use with caution for large files)',
downloadDirectly: 'Download directly (use with caution for large files)',
copySourceFilePreviewLink: 'Copy source file preview link',
viewGenerationInfo: 'View generation information (prompt, etc.)',
sendToTxt2img: 'Send to txt2img',
sendToImg2img: 'Send to img2img',
sendToInpaint: 'Send to Inpaint',
sendToExtraFeatures: 'Send to Extra',
loadNextPage: 'Load next page',
autoUpload: 'Auto upload',
localFile: 'Local file',
baiduCloud: 'Baidu Netdisk',
taskRecord: 'Task record',
globalSettings: 'Global settings',
onlyOneTaskRecordAllowed:
'Only one task record is allowed. If you have special requirements, please open an issue on the repository.',
welcome: 'Welcome',
openInNewWindow: 'Open in new tab',
restoreLastRecord: 'Restore last record',
launch: 'Launch',
walkMode: 'Use Walk mode to browse images',
launchFromQuickMove: 'Launch from Quick Move',
recent: 'Recent',
emptyStartPage: 'Empty start page',
deleteNotAllowedWithOnePaneLeft: 'Deletion is not allowed with only one pane left!!!',
t2i: 'Text to image',
i2i: 'Image to image',
saveButtonSavesTo: 'Directory for saving images using the Save button',
extra: 'Extra',
gridImage: 'Grid image',
'i2i-grid': 'Image to image grid',
image: 'Image',
't2i-grid': 'Text to image grid',
workingFolder: 'Working folder',
lang: 'Language',
langChangeReload: 'Reload: Some changes may require a reload to take effect',
hypernetworks: 'hypernetworks',
openOnTheRight: 'Open on the right',
openInNewTab: 'Open in a new tab',
loginPrompt: 'This feature requires you to log in to Baidu Cloud Drive using your BDUSS.',
openWithWalkMode: 'Open with Walk Mode',
longPressOpenContextMenu: 'Support long press to open right-click menu',
baiduNetdiskCollapseTitle:
"Baidu Netdisk functions (only previewing images don't require opening)",
clickHere2install: 'Click here to install'
}
const zh = {
errorOccurred: '发生了个错误',
logoutSuccess: '登出成功',
useThumbnailPreview: '使用缩略图预览',
pollingInterval: '轮询间隔',
smallerIntervalMeansMoreNetworkTraffic: '越小对网络压力越大',
gridThumbnailWidth: '网格缩略图宽度',
largeGridThumbnailWidth: '大尺寸网格缩略图宽度',
pause: '暂停',
start: '开始',
waitingUploadCount: '等待上传数量',
uploadFailureCount: '上传失败数量',
completedCount: '已完成数量',
realTimeLog: '实时日志',
tip: '提示',
clickToViewLogs:
'点击下面查看具体日志若有日志错误内包含名字不合规可尝试在sd-webui的设置页换一种图像文件名格式例如[datetime<%Y-%m-%d %H-%M-%S>]',
startedAt: '开始于:',
sortByDateAscending: '日期升序',
sortByDateDescending: '日期降序',
sortByNameAscending: '名称升序',
sortByNameDescending: '名称降序',
sortBySizeAscending: '大小升序',
sortBySizeDescending: '大小降序',
inputAddressAndPressEnter: '输入地址回车',
go: '前往',
unknownError: '未知错误',
loadingNextFolder: '即将加载下一个文件夹的文件',
moveFailedCheckPath: '移动失败,检查你的路径输入',
detailList: '详情列表',
previewGrid: '预览网格',
largePreviewGrid: '大尺寸预览网格',
sortBy: '按照',
moveSelectedFilesTo: '下列文件移动至',
confirm: '确定?',
upload: '上传',
download: '下载',
local: '本地',
cloud: '云盘',
confirmCreateTask: '确定创建{type}任务。{more}',
sendImageFailed: '发送图像失败请携带console的错误消息找开发者',
confirmDelete: '确认删除?',
deleteSuccess: '删除成功',
dependenciesNotInstalled: '尚未安装依赖,当前不可用',
login: '登录',
doubleClickToCopy: '双击复制',
root: '根',
drive: '盘',
refresh: '刷新',
quickMove: '快速移动',
more: '更多',
viewMode: '查看模式',
sortingMethod: '排序方法',
copyPath: '复制路径',
deleteSelected: '删除选中',
previewInNewWindow: '在新窗口预览(如果浏览器处理不了会下载,大文件的话谨慎)',
downloadDirectly: '直接下载(大文件的话谨慎)',
copySourceFilePreviewLink: '复制源文件预览链接',
viewGenerationInfo: '查看生成信息(prompt等)',
sendToTxt2img: '发送到文生图',
sendToImg2img: '发送到图生图',
sendToInpaint: '发送到局部重绘',
sendToExtraFeatures: '发送到附加功能',
loadNextPage: '加载下一页',
autoUpload: '自动上传',
localFile: '本地文件',
baiduCloud: '百度云',
taskRecord: '任务记录',
globalSettings: '全局设置',
onlyOneTaskRecordAllowed: '任务记录有且只能有一个如果特殊需求请前往仓库提issue',
welcome: '欢迎',
openInNewWindow: '在新页面打开',
restoreLastRecord: '还原上次记录',
launch: '启动',
walkMode: '使用 Walk 模式浏览图片',
launchFromQuickMove: '从快速移动启动',
recent: '最近',
emptyStartPage: '空启动页',
deleteNotAllowedWithOnePaneLeft: '在仅剩一个pane的情况下不允许删除!!!',
t2i: '文生图',
i2i: '图生图',
saveButtonSavesTo: '使用“保存”按钮保存图像的目录',
extra: '附加',
gridImage: '宫格图',
'i2i-grid': '图生图网格',
image: '图像',
't2i-grid': '文生图宫格',
workingFolder: '工作文件夹',
lang: '语言',
langChangeReload: '重新加载: 一些变化可能需要在重新加载后生效',
hypernetworks: '超网络模型',
openOnTheRight: '在右边打开',
openInNewTab: '在新标签打开',
loginPrompt: '这个功能要求你先使用BDUSS登录到百度云盘。',
openWithWalkMode: '使用 Walk 模式打开',
longPressOpenContextMenu: '支持使用长按打开右键菜单',
baiduNetdiskCollapseTitle: '百度云盘相关功能(仅预览图片无需打开)',
clickHere2install: '点此安装',
searchResults: "搜索结果"
}
const en: Record<keyof typeof zh, string> = {
errorOccurred: 'An error occurred',
logoutSuccess: 'Logged out successfully',
useThumbnailPreview: 'Use thumbnail preview',
pollingInterval: 'Polling interval',
smallerIntervalMeansMoreNetworkTraffic: 'Smaller interval means more network traffic',
gridThumbnailWidth: 'Grid thumbnail width',
largeGridThumbnailWidth: 'Large grid thumbnail width',
pause: 'Pause',
start: 'Start',
waitingUploadCount: 'Waiting upload count',
uploadFailureCount: 'Upload failure count',
completedCount: 'Completed count',
realTimeLog: 'Real-time log',
tip: 'Tip',
clickToViewLogs:
'Click below to view specific logs. If there are naming errors, try changing the image filename format on the sd-webui settings page, such as [datetime<%Y-%m-%d %H-%M-%S>]',
startedAt: 'Started at: ',
sortByDateAscending: 'Date ascending',
sortByDateDescending: 'Date descending',
sortByNameAscending: 'Name ascending',
sortByNameDescending: 'Name descending',
sortBySizeAscending: 'Size ascending',
sortBySizeDescending: 'Size descending',
inputAddressAndPressEnter: 'Input address and press Enter',
go: 'Go',
unknownError: 'Unknown error',
loadingNextFolder: 'Loading files from the next folder',
moveFailedCheckPath: 'Move failed. Check your path input.',
detailList: 'Detail list',
previewGrid: 'Preview grid',
largePreviewGrid: 'Large preview grid',
sortBy: 'Sort by',
moveSelectedFilesTo: 'Move selected files to',
confirm: 'Confirm?',
upload: 'Upload',
download: 'Download',
local: 'Local',
cloud: 'Cloud',
confirmCreateTask: 'Confirm to create {type} task. {more}',
sendImageFailed:
'Failed to send image. Please contact the developer with the error message from the console.',
confirmDelete: 'Are you sure you want to delete?',
deleteSuccess: 'Deleted successfully',
dependenciesNotInstalled: 'Dependencies not installed. Currently unavailable.',
login: 'Login',
doubleClickToCopy: 'Double-click to copy',
root: 'Root',
drive: ' drive',
refresh: 'Refresh',
quickMove: 'Quick move',
more: 'More',
viewMode: 'View mode',
sortingMethod: 'Sorting method',
copyPath: 'Copy path',
deleteSelected: 'Delete selected',
previewInNewWindow:
'Open in new window (will download if browser cannot handle it, use with caution for large files)',
downloadDirectly: 'Download directly (use with caution for large files)',
copySourceFilePreviewLink: 'Copy source file preview link',
viewGenerationInfo: 'View generation information (prompt, etc.)',
sendToTxt2img: 'Send to txt2img',
sendToImg2img: 'Send to img2img',
sendToInpaint: 'Send to Inpaint',
sendToExtraFeatures: 'Send to Extra',
loadNextPage: 'Load next page',
autoUpload: 'Auto upload',
localFile: 'Local file',
baiduCloud: 'Baidu Netdisk',
taskRecord: 'Task record',
globalSettings: 'Global settings',
onlyOneTaskRecordAllowed:
'Only one task record is allowed. If you have special requirements, please open an issue on the repository.',
welcome: 'Welcome',
openInNewWindow: 'Open in new tab',
restoreLastRecord: 'Restore last record',
launch: 'Launch',
walkMode: 'Use Walk mode to browse images',
launchFromQuickMove: 'Launch from Quick Move',
recent: 'Recent',
emptyStartPage: 'Empty start page',
deleteNotAllowedWithOnePaneLeft: 'Deletion is not allowed with only one pane left!!!',
t2i: 'Text to image',
i2i: 'Image to image',
saveButtonSavesTo: 'Directory for saving images using the Save button',
extra: 'Extra',
gridImage: 'Grid image',
'i2i-grid': 'Image to image grid',
image: 'Image',
't2i-grid': 'Text to image grid',
workingFolder: 'Working folder',
lang: 'Language',
langChangeReload: 'Reload: Some changes may require a reload to take effect',
hypernetworks: 'hypernetworks',
openOnTheRight: 'Open on the right',
openInNewTab: 'Open in a new tab',
loginPrompt: 'This feature requires you to log in to Baidu Cloud Drive using your BDUSS.',
openWithWalkMode: 'Open with Walk Mode',
longPressOpenContextMenu: 'Support long press to open right-click menu',
baiduNetdiskCollapseTitle:
"Baidu Netdisk functions (only previewing images don't require opening)",
clickHere2install: 'Click here to install',
searchResults: "Search Results"
}
declare module 'vue' {
export interface ComponentCustomProperties {
$t (key: keyof (typeof messages)['en'], ...args: []): string
$t (key: keyof typeof zh, ...args: []): string
}
}
@ -222,7 +221,10 @@ export const getPreferredLang = () => {
export const i18n = createI18n({
locale: getPreferredLang(),
fallbackLocale: 'en',
messages,
messages: {
zh ,
en
},
legacy: false
})

View File

@ -18,6 +18,7 @@ const compMap: Record<TabPane['type'], ReturnType<typeof defineAsyncComponent>>
empty: defineAsyncComponent(() => import('./emptyStartup.vue')),
"log-detail": defineAsyncComponent(() => import('@/page/taskRecord/logDetail.vue')),
"global-setting": defineAsyncComponent(() => import('@/page/globalSetting.vue')),
"tag-search-matched-image-grid": defineAsyncComponent(() => import('@/page/TagSearch/MatchedImageGrid.vue')),
"tag-search": defineAsyncComponent(() => import('@/page/TagSearch/TagSearch.vue'))
}
const onEdit = (idx: number, targetKey: any, action: string) => {
@ -73,8 +74,7 @@ watch(() => global.tabList, async () => {
<pane v-for="tab, tabIdx in global.tabList" :key="key(tab)">
<edge-trigger :tabIdx="tabIdx">
<a-tabs type="editable-card" v-model:activeKey="tab.key" @edit="(key, act) => onEdit(tabIdx, key, act)">
<a-tab-pane v-for="pane, paneIdx in tab.panes" :key="pane.key" :tab="pane.name"
class="pane"
<a-tab-pane v-for="pane, paneIdx in tab.panes" :key="pane.key" :tab="pane.name" class="pane"
:force-render="pane.type === 'task-record'">
<component :is="compMap[pane.type]" :tabIdx="tabIdx" :paneIdx="paneIdx" v-bind="pane" />
</a-tab-pane>
@ -95,7 +95,9 @@ watch(() => global.tabList, async () => {
height: 100vh;
}
}
.pane {
height: calc(100vh - 40px);
--pane-max-height: calc(100vh - 40px);
}
</style>

View File

@ -2,7 +2,7 @@
import { useGlobalStore, type TabPane } from '@/store/useGlobalStore'
import { uniqueId } from 'lodash-es'
import { computed } from 'vue'
import { ID } from 'vue3-ts-util'
import { ID, ok } from 'vue3-ts-util'
import { CloudDownloadOutlined, FileDoneOutlined } from '@/icon'
import { message } from 'ant-design-vue'
import { t } from '@/i18n'
@ -23,6 +23,8 @@ const openInCurrentTab = (type: TabPane['type'], path?: string, walkMode = false
return message.error(t('onlyOneTaskRecordAllowed')) //
}
switch (type) {
case 'tag-search-matched-image-grid':
return
case 'auto-upload':
case 'task-record':
case 'log-detail':

View File

@ -0,0 +1,78 @@
<script lang="ts" setup>
import { reactive, ref } from 'vue'
import { FetchQueue, copy2clipboard } from 'vue3-ts-util'
import fileItemCell from '@/page/fileTransfer/FileItem.vue'
import type { FileNodeInfo } from '@/api/files'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
// @ts-ignore
import { RecycleScroller } from 'vue-virtual-scroller'
import {
useFilesDisplay, type Scroller, useHookShareState,
useMobileOptimization, useFileItemActions, toRawFileUrl, usePreview
} from '@/page/fileTransfer/hook'
import { identity } from 'lodash-es'
import { getImagesByTags } from '@/api/db'
import { watch } from 'vue'
const images = ref<FileNodeInfo[]>()
const queue = reactive(new FetchQueue())
const props = defineProps<{ tabIdx: number, paneIdx: number, selectedTagIds: number[], id: string }>()
watch(() => props.selectedTagIds, async () => {
const { res } = queue.pushAction(() => getImagesByTags(props.selectedTagIds))
images.value = (await res).sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
scroller.value?.scrollToItem(0)
}, { immediate: true })
const scroller = ref<Scroller>()
const propsMock = { tabIdx: -1, target: 'local', paneIdx: -1 } as const
const { stackViewEl } = useHookShareState().toRefs()
const { itemSize, gridItems } = useFilesDisplay(propsMock)
const { showMenuIdx } = useMobileOptimization()
const { showGenInfo, imageGenInfo, q: genInfoQueue, onContextMenuClick } = useFileItemActions(propsMock, { openNext: identity })
const { previewIdx } = usePreview(propsMock)
</script>
<template>
<div class="container" ref="stackViewEl">
<ASpin size="large" :spinning="!queue.isIdle">
<AModal v-model:visible="showGenInfo" width="70vw" mask-closable @ok="showGenInfo = false">
<template #cancelText />
<ASkeleton active :loading="!genInfoQueue.isIdle">
<div style="width: 100%; word-break: break-all;white-space: pre-line;max-height: 70vh;overflow: auto;"
@dblclick="copy2clipboard(imageGenInfo, 'copied')">
<div class="hint">{{ $t('doubleClickToCopy') }}</div>
{{ imageGenInfo }}
</div>
</ASkeleton>
</AModal>
<RecycleScroller ref="scroller" class="file-list" :items="images || []" :item-size="itemSize.first" key-field="fullpath"
:item-secondary-size="itemSize.second" :gridItems="gridItems">
<template v-slot="{ item: file, index: idx }">
<!-- idx 和file有可能丢失 -->
<file-item-cell :idx="idx" :file="file" v-model:show-menu-idx="showMenuIdx"
:full-screen-preview-image-url="toRawFileUrl(file)" @context-menu-click="onContextMenuClick" />
</template>
</RecycleScroller>
</ASpin>
</div>
</template>
<style scoped lang="scss">
.container {
.file-list {
list-style: none;
padding: 8px;
height: 100%;
overflow: auto;
height: var(--pane-max-height);
width: 100%;
}
}
</style>

View File

@ -1,25 +1,20 @@
<script lang="ts" setup>
import { onMounted, reactive, ref, computed } from 'vue'
import { getDbBasicInfo, updateImageData, type DataBaseBasicInfo, getImagesByTags } from '@/api/db'
import { FetchQueue, copy2clipboard } from 'vue3-ts-util'
import { FetchQueue, SearchSelect } from 'vue3-ts-util'
import { CheckOutlined } from '@/icon'
import fileItemCell from '@/page/fileTransfer/FileItem.vue'
import type { FileNodeInfo } from '@/api/files'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
// @ts-ignore
import { RecycleScroller } from 'vue-virtual-scroller'
import { useFilesDisplay, useHookShareState, useMobileOptimization, useFileItemActions } from '@/page/fileTransfer/hook'
import { identity } from 'lodash-es'
import { useGlobalStore } from '@/store/useGlobalStore'
import { uniqueId } from 'lodash-es'
const props = defineProps<{ tabIdx: number, paneIdx: number }>()
const global = useGlobalStore()
const queue = reactive(new FetchQueue())
const info = ref<DataBaseBasicInfo>()
const selectedId = ref(new Set<number>())
const tags = computed(() => info.value ? info.value.tags.slice().sort((a, b) => b.count - a.count) : [])
const images = ref<FileNodeInfo[]>()
const pairid = uniqueId()
onMounted(async () => {
info.value = await getDbBasicInfo()
console.log(info, tags)
})
const onUpdateBtnClick = async () => {
@ -30,32 +25,18 @@ const onUpdateBtnClick = async () => {
})
}
const propsMock = { tabIdx: -1, target: 'local', paneIdx: -1 } as const
const { stackViewEl, } = useHookShareState().toRefs()
const { itemSize, gridItems } = useFilesDisplay(propsMock)
const { showMenuIdx } = useMobileOptimization()
const {showGenInfo, imageGenInfo, q: genInfoQueue, onContextMenuClick } = useFileItemActions(propsMock, { openNext: identity })
const query = async () => {
const { res } = queue.pushAction(() => getImagesByTags(Array.from(selectedId.value)))
images.value = (await res)
const query = () => {
global.openTagSearchMatchedImageGridInRight(props.tabIdx, pairid, Array.from(selectedId.value))
}
</script>
<template>
<div class="container" ref="stackViewEl">
<AModal v-model:visible="showGenInfo" width="70vw" mask-closable @ok="showGenInfo = false">
<template #cancelText />
<ASkeleton active :loading="!genInfoQueue.isIdle">
<div style="width: 100%; word-break: break-all;white-space: pre-line;max-height: 70vh;overflow: auto;"
@dblclick="copy2clipboard(imageGenInfo, 'copied')">
<div class="hint">{{ $t('doubleClickToCopy') }}</div>
{{ imageGenInfo }}
</div>
</ASkeleton>
</AModal>
<div class="container">
<ASelect v-if="false"/>
<template v-if="info">
<div>
<SearchSelect :conv="{ value: v => v.id, text: v=> v.display_name ? `${v.display_name} : ${v.name}` : v.name, }" mode="multiple" style="width: 100%;" :options="tags" :value="Array.from(selectedId)" @update:value="v => selectedId = new Set(v)" />
</div>
<AButton @click="onUpdateBtnClick" :loading="!queue.isIdle" type="primary" v-if="info.expired || !info.img_count">{{
info.img_count === 0 ? 'gen idx' : 'updat index' }}</AButton>
<AButton v-else type="primary" @click="query" :loading="!queue.isIdle">search</AButton>
@ -67,35 +48,17 @@ const query = async () => {
</li>
</ul>
</template>
{{gridItems}}
<RecycleScroller class="file-list" :items="images || []" :item-size="itemSize.first" key-field="fullpath"
:item-secondary-size="itemSize.second" :gridItems="gridItems">
<template v-slot="{ item: file, index: idx }">
<!-- idx 和file有可能丢失 -->
<file-item-cell :idx="idx" :file="file" v-model:show-menu-idx="showMenuIdx" @context-menu-click="onContextMenuClick"/>
</template>
</RecycleScroller>
</div>
</template>
<style scoped lang="scss">
.container {
height: 100%;
height: var(--pane-max-height);
overflow: auto;
.file-list {
list-style: none;
padding: 8px;
height: 50vh;
overflow: auto;
width: 100%;
}
.tag-list {
list-style: none;
padding: 0;
max-height: 50vh;
overflow: auto;
.tag {
border: 2px solid var(--zp-secondary);

View File

@ -20,6 +20,15 @@ interface OtherTabPane {
}
// logDetailId
interface TagSearchMatchedImageGridTabPane {
type: 'tag-search-matched-image-grid'
name: string
readonly key: string
selectedTagIds: number[]
id: string
}
interface LogDetailTabPane {
type: 'log-detail'
logDetailId: string
@ -37,7 +46,7 @@ export interface FileTransferTabPane {
stackKey?: string
}
export type TabPane = FileTransferTabPane | OtherTabPane | LogDetailTabPane
export type TabPane = FileTransferTabPane | OtherTabPane | LogDetailTabPane | TagSearchMatchedImageGridTabPane
export interface Tab extends UniqueId {
panes: TabPane[]
@ -70,6 +79,8 @@ export const useGlobalStore = defineStore('useGlobalStore', () => {
lastTabListRecord.value = lastTabListRecord.value.slice(0, 2) as any
}
const createTaskRecordPaneIfNotExist = async (tabIdx = 0) => {
if (!tabList.value.map(v => v.panes).flat().find(v => v.type === 'task-record')) {
tabList.value[tabIdx].panes.push({ type: 'task-record', key: uniqueId(), name: '任务记录' })
@ -85,6 +96,31 @@ export const useGlobalStore = defineStore('useGlobalStore', () => {
tab.key = log.key
tab.panes.push(log)
}
}
const openTagSearchMatchedImageGridInRight = async (tabIdx: number, id: string, tagIds: number[]) => {
let pane = tabList.value.map(v => v.panes).flat()
.find(v => v.type === 'tag-search-matched-image-grid' && v.id === id) as TagSearchMatchedImageGridTabPane
if (pane) {
pane.selectedTagIds = tagIds.slice()
return
} else {
pane = {
type: 'tag-search-matched-image-grid',
id: id,
selectedTagIds: tagIds.slice(),
key: uniqueId(),
name: t('searchResults')
}
}
const tab = tabList.value[tabIdx + 1]
if (!tab) {
tabList.value.push(ID({ panes: [pane], key: pane.key }))
} else {
tab.key = pane.key
tab.panes.push(pane)
}
}
@ -124,15 +160,16 @@ export const useGlobalStore = defineStore('useGlobalStore', () => {
openBaiduYunIfNotLogged,
longPressOpenContextMenu,
baiduNetdiskPageOpened,
openTagSearchMatchedImageGridInRight,
...typedEventEmitter<{ createNewTask: Partial<UploadTaskSummary> }>()
}
}, {
persist: {
paths: [
'lang', 'enableThumbnail', 'lastTabListRecord',
'lang', 'enableThumbnail', 'lastTabListRecord',
'stackViewSplit', 'autoUploadRecvDir', 'recent',
'gridThumbnailSize', 'largeGridThumbnailSize',
'longPressOpenContextMenu','baiduNetdiskPageOpened'
]
'gridThumbnailSize', 'largeGridThumbnailSize',
'longPressOpenContextMenu', 'baiduNetdiskPageOpened'
]
}
})

View File

@ -0,0 +1,8 @@
import { defineStore } from 'pinia'
export const useTagSearch = defineStore('useTagSearch', () => {
return {
}
})