feat: improve topic search UX and dependency gating
parent
3ba8997626
commit
cfa589c68f
|
|
@ -20,4 +20,6 @@ plugins/*
|
||||||
!plugins/.gitkeep
|
!plugins/.gitkeep
|
||||||
test_data/*
|
test_data/*
|
||||||
.DS_Store
|
.DS_Store
|
||||||
iib_output
|
iib_output
|
||||||
|
iib.db-shm
|
||||||
|
iib.db-wal
|
||||||
|
|
|
||||||
|
|
@ -415,7 +415,7 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
if txt_path:
|
if txt_path:
|
||||||
os.remove(txt_path)
|
os.remove(txt_path)
|
||||||
|
|
||||||
img = DbImg.get(conn, os.path.normpath(path))
|
img = DbImg.get(conn, os.path.normpath(path))
|
||||||
if img:
|
if img:
|
||||||
logger.info("delete file: %s", path)
|
logger.info("delete file: %s", path)
|
||||||
|
|
|
||||||
|
|
@ -631,9 +631,9 @@ def mount_topic_cluster_routes(
|
||||||
"""
|
"""
|
||||||
Mount embedding + topic clustering endpoints (MVP: manual, iib_output only).
|
Mount embedding + topic clustering endpoints (MVP: manual, iib_output only).
|
||||||
"""
|
"""
|
||||||
# Fail fast at API layer if required perf deps are missing.
|
# IMPORTANT:
|
||||||
# (We don't crash the whole server at import time.)
|
# Do NOT call _ensure_perf_deps() here.
|
||||||
_ensure_perf_deps()
|
# We only fail at specific API endpoints so users without deps can still use other features.
|
||||||
|
|
||||||
async def _run_cluster_job(job_id: str, req) -> None:
|
async def _run_cluster_job(job_id: str, req) -> None:
|
||||||
try:
|
try:
|
||||||
|
|
@ -1002,6 +1002,8 @@ def mount_topic_cluster_routes(
|
||||||
dependencies=[Depends(verify_secret), Depends(write_permission_required)],
|
dependencies=[Depends(verify_secret), Depends(write_permission_required)],
|
||||||
)
|
)
|
||||||
async def build_iib_output_embeddings(req: BuildIibOutputEmbeddingReq):
|
async def build_iib_output_embeddings(req: BuildIibOutputEmbeddingReq):
|
||||||
|
# TopicSearch feature requires perf deps; fail at API layer, not at server start.
|
||||||
|
_ensure_perf_deps()
|
||||||
if not openai_api_key:
|
if not openai_api_key:
|
||||||
raise HTTPException(status_code=500, detail="OpenAI API Key not configured")
|
raise HTTPException(status_code=500, detail="OpenAI API Key not configured")
|
||||||
if not openai_base_url:
|
if not openai_base_url:
|
||||||
|
|
@ -1044,6 +1046,8 @@ def mount_topic_cluster_routes(
|
||||||
dependencies=[Depends(verify_secret), Depends(write_permission_required)],
|
dependencies=[Depends(verify_secret), Depends(write_permission_required)],
|
||||||
)
|
)
|
||||||
async def cluster_iib_output_job_start(req: ClusterIibOutputReq):
|
async def cluster_iib_output_job_start(req: ClusterIibOutputReq):
|
||||||
|
# TopicSearch feature requires perf deps; fail at API layer, not at server start.
|
||||||
|
_ensure_perf_deps()
|
||||||
"""
|
"""
|
||||||
Start a background job for embedding + clustering + LLM titling.
|
Start a background job for embedding + clustering + LLM titling.
|
||||||
Returns job_id immediately; frontend should poll job_status to show progress.
|
Returns job_id immediately; frontend should poll job_status to show progress.
|
||||||
|
|
@ -1381,6 +1385,8 @@ def mount_topic_cluster_routes(
|
||||||
dependencies=[Depends(verify_secret), Depends(write_permission_required)],
|
dependencies=[Depends(verify_secret), Depends(write_permission_required)],
|
||||||
)
|
)
|
||||||
async def search_iib_output_by_prompt(req: PromptSearchReq):
|
async def search_iib_output_by_prompt(req: PromptSearchReq):
|
||||||
|
# TopicSearch feature requires perf deps; fail at API layer, not at server start.
|
||||||
|
_ensure_perf_deps()
|
||||||
if not openai_api_key:
|
if not openai_api_key:
|
||||||
raise HTTPException(status_code=500, detail="OpenAI API Key not configured")
|
raise HTTPException(status_code=500, detail="OpenAI API Key not configured")
|
||||||
if not openai_base_url:
|
if not openai_base_url:
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ declare module '@vue/runtime-core' {
|
||||||
AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
|
AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
|
||||||
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
|
||||||
AModal: typeof import('ant-design-vue/es')['Modal']
|
AModal: typeof import('ant-design-vue/es')['Modal']
|
||||||
|
AProgress: typeof import('ant-design-vue/es')['Progress']
|
||||||
ARadioButton: typeof import('ant-design-vue/es')['RadioButton']
|
ARadioButton: typeof import('ant-design-vue/es')['RadioButton']
|
||||||
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
|
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
|
||||||
ARow: typeof import('ant-design-vue/es')['Row']
|
ARow: typeof import('ant-design-vue/es')['Row']
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{d as a,U as t,V as s,c as n,cI as _,a0 as c}from"./index-db391c6a.js";const o={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",o,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const p=c(i,[["__scopeId","data-v-ec71de83"]]);export{p as default};
|
import{d as a,U as t,V as s,c as n,cM as _,a0 as c}from"./index-5c24d9cc.js";const o={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",o,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const p=c(i,[["__scopeId","data-v-ec71de83"]]);export{p 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 @@
|
||||||
.topic-search[data-v-39216928]{height:var(--pane-max-height);overflow:auto;padding:12px}.toolbar[data-v-39216928]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;background:var(--zp-primary-background);border-radius:12px}.left[data-v-39216928]{display:flex;align-items:center;gap:8px}.title[data-v-39216928]{display:flex;align-items:center;gap:8px;font-weight:700}.right[data-v-39216928]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.label[data-v-39216928]{color:#888}.guide[data-v-39216928]{display:flex;flex-direction:column;gap:8px;padding:10px 12px;background:var(--zp-primary-background);border-radius:12px;border:1px solid rgba(0,0,0,.06)}.guide-row[data-v-39216928]{display:flex;align-items:center;gap:10px}.guide-hint[data-v-39216928]{margin-top:4px;display:flex;align-items:center;gap:10px;opacity:.85}.guide-icon[data-v-39216928]{width:22px;text-align:center;flex:0 0 22px}.guide-text[data-v-39216928]{flex:1 1 auto;min-width:0;color:#000000bf}.grid[data-v-39216928]{margin-top:12px;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.card[data-v-39216928]{background:var(--zp-primary-background);border-radius:12px;padding:10px 12px;cursor:pointer;border:1px solid rgba(0,0,0,.06)}.card[data-v-39216928]:hover{border-color:#1890ff99}.card-top[data-v-39216928]{display:flex;align-items:center;justify-content:space-between;gap:8px}.card-title[data-v-39216928]{font-weight:700}.card-count[data-v-39216928]{min-width:28px;text-align:right;opacity:.75}.card-desc[data-v-39216928]{margin-top:6px;color:#666;font-size:12px}.empty[data-v-39216928]{height:calc(var(--pane-max-height) - 72px);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px}.hint[data-v-39216928]{font-size:16px;opacity:.75}
|
|
||||||
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 F,a1 as B,cJ as $,cc as S,U as _,V as w,W as f,c as l,a3 as d,X as p,Y as c,a4 as s,a2 as A,af as R,cK as V,cL as y,z as x,B as E,ak as T,a0 as U}from"./index-db391c6a.js";import{_ as L}from"./index-30c22d1a.js";import{u as N,a as H,f as O,F as W,d as j}from"./FileItem-9be5bb5d.js";import"./numInput.vue_vue_type_style_index_0_scoped_bd954eda_lang-28fed536.js";/* empty css */import"./index-4a1bd1ce.js";import"./_isIterateeCall-6ab5736a.js";import"./index-ae90fb7e.js";import"./index-83d83387.js";const q={class:"actions-panel actions"},G={class:"item"},J={key:0,class:"file-list"},K={class:"hint"},P=F({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(Q){const{stackViewEl:D}=N().toRefs(),{itemSize:h,gridItems:b,cellWidth:g}=H(),i=B(),m=O(),{selectdFiles:a}=$(m),r=S(),v=async e=>{const t=V(e);t&&m.addFiles(t.nodes)},C=async()=>{r.pushAction(async()=>{const e=await y.value.post("/zip",{paths:a.value.map(u=>u.fullpath),compress:i.batchDownloadCompress,pack_only:!1},{responseType:"blob"}),t=window.URL.createObjectURL(new Blob([e.data])),o=document.createElement("a");o.href=t,o.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(o),o.click()})},I=async()=>{r.pushAction(async()=>{await y.value.post("/zip",{paths:a.value.map(e=>e.fullpath),compress:i.batchDownloadCompress,pack_only:!0},{responseType:"blob"}),x.success(E("success"))})},z=e=>{a.value.splice(e,1)};return(e,t)=>{const o=T,u=L;return _(),w("div",{class:"container",ref_key:"stackViewEl",ref:D,onDrop:v},[f("div",q,[l(o,{onClick:t[0]||(t[0]=n=>s(m).selectdFiles=[])},{default:d(()=>[p(c(e.$t("clear")),1)]),_:1}),f("div",G,[p(c(e.$t("compressFile"))+": ",1),l(u,{checked:s(i).batchDownloadCompress,"onUpdate:checked":t[1]||(t[1]=n=>s(i).batchDownloadCompress=n)},null,8,["checked"])]),l(o,{onClick:I,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("packOnlyNotDownload")),1)]),_:1},8,["loading"]),l(o,{onClick:C,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("zipDownload")),1)]),_:1},8,["loading"])]),s(a).length?(_(),A(s(j),{key:1,ref:"scroller",class:"file-list",items:s(a).slice(),"item-size":s(h).first,"key-field":"fullpath","item-secondary-size":s(h).second,gridItems:s(b)},{default:d(({item:n,index:k})=>[l(W,{idx:k,file:n,"cell-width":s(g),"enable-close-icon":"",onCloseIconClick:X=>z(k),"full-screen-preview-image-url":s(R)(n),"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"])):(_(),w("div",J,[f("p",K,c(e.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const le=U(P,[["__scopeId","data-v-3d7e6f2d"]]);export{le as default};
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
import{d as F,a1 as B,cN as $,cc as S,U as _,V as w,W as f,c as l,a3 as d,X as p,Y as c,a4 as s,a2 as A,af as R,cO as V,cP as y,z as x,B as E,ak as N,a0 as T}from"./index-5c24d9cc.js";import{_ as U}from"./index-9a35a2b1.js";import{u as L,a as O,f as H,F as P,d as W}from"./FileItem-a3052417.js";import"./numInput.vue_vue_type_style_index_0_scoped_bd954eda_lang-86f0bbbc.js";/* empty css */import"./index-ea65c04c.js";import"./_isIterateeCall-cb6f4b91.js";import"./index-9849295f.js";import"./index-414d2170.js";const j={class:"actions-panel actions"},q={class:"item"},G={key:0,class:"file-list"},Q={class:"hint"},X=F({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(Y){const{stackViewEl:D}=L().toRefs(),{itemSize:h,gridItems:b,cellWidth:g}=O(),i=B(),m=H(),{selectdFiles:a}=$(m),r=S(),v=async e=>{const t=V(e);t&&m.addFiles(t.nodes)},C=async()=>{r.pushAction(async()=>{const e=await y.value.post("/zip",{paths:a.value.map(u=>u.fullpath),compress:i.batchDownloadCompress,pack_only:!1},{responseType:"blob"}),t=window.URL.createObjectURL(new Blob([e.data])),o=document.createElement("a");o.href=t,o.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(o),o.click()})},I=async()=>{r.pushAction(async()=>{await y.value.post("/zip",{paths:a.value.map(e=>e.fullpath),compress:i.batchDownloadCompress,pack_only:!0},{responseType:"blob"}),x.success(E("success"))})},z=e=>{a.value.splice(e,1)};return(e,t)=>{const o=N,u=U;return _(),w("div",{class:"container",ref_key:"stackViewEl",ref:D,onDrop:v},[f("div",j,[l(o,{onClick:t[0]||(t[0]=n=>s(m).selectdFiles=[])},{default:d(()=>[p(c(e.$t("clear")),1)]),_:1}),f("div",q,[p(c(e.$t("compressFile"))+": ",1),l(u,{checked:s(i).batchDownloadCompress,"onUpdate:checked":t[1]||(t[1]=n=>s(i).batchDownloadCompress=n)},null,8,["checked"])]),l(o,{onClick:I,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("packOnlyNotDownload")),1)]),_:1},8,["loading"]),l(o,{onClick:C,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("zipDownload")),1)]),_:1},8,["loading"])]),s(a).length?(_(),A(s(W),{key:1,ref:"scroller",class:"file-list",items:s(a).slice(),"item-size":s(h).first,"key-field":"fullpath","item-secondary-size":s(h).second,gridItems:s(b)},{default:d(({item:n,index:k})=>[l(P,{idx:k,file:n,"cell-width":s(g),"enable-close-icon":"",onCloseIconClick:J=>z(k),"full-screen-preview-image-url":s(R)(n),"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"])):(_(),w("div",G,[f("p",Q,c(e.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const le=T(X,[["__scopeId","data-v-3d7e6f2d"]]);export{le as default};
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{u as w,a as y,F as b,d as k}from"./FileItem-9be5bb5d.js";import{d as x,a1 as h,c9 as F,r as D,bh as I,bl as C,U as V,V as E,c as n,a3 as z,a4 as e,af as S,cK as B,cM as K,a0 as R}from"./index-db391c6a.js";import"./numInput.vue_vue_type_style_index_0_scoped_bd954eda_lang-28fed536.js";/* empty css */import"./index-4a1bd1ce.js";import"./_isIterateeCall-6ab5736a.js";import"./index-ae90fb7e.js";import"./index-83d83387.js";const A=x({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,m=h(),{stackViewEl:d}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=y(),g=F(),a=D(o.files??[]),_=async s=>{const l=B(s);o.allowDragAndDrop&&l&&(a.value=K([...a.value,...l.nodes]))},v=s=>{a.value.splice(s,1)};return I(()=>{m.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(a.value),setFiles:s=>a.value=s})}),(s,l)=>(V(),E("div",{class:"container",ref_key:"stackViewEl",ref:d,onDrop:_},[n(e(k),{ref:"scroller",class:"file-list",items:a.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(b,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:M=>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 j=R(A,[["__scopeId","data-v-0c31f6b2"]]);export{j as default};
|
import{u as w,a as y,F as b,d as k}from"./FileItem-a3052417.js";import{d as x,a1 as h,c9 as F,r as D,bh as I,bl as C,U as V,V as E,c as n,a3 as z,a4 as e,af as S,cO as B,cQ as R,a0 as A}from"./index-5c24d9cc.js";import"./numInput.vue_vue_type_style_index_0_scoped_bd954eda_lang-86f0bbbc.js";/* empty css */import"./index-ea65c04c.js";import"./_isIterateeCall-cb6f4b91.js";import"./index-9849295f.js";import"./index-414d2170.js";const K=x({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,m=h(),{stackViewEl:d}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=y(),g=F(),a=D(o.files??[]),_=async s=>{const l=B(s);o.allowDragAndDrop&&l&&(a.value=R([...a.value,...l.nodes]))},v=s=>{a.value.splice(s,1)};return I(()=>{m.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(a.value),setFiles:s=>a.value=s})}),(s,l)=>(V(),E("div",{class:"container",ref_key:"stackViewEl",ref:d,onDrop:_},[n(e(k),{ref:"scroller",class:"file-list",items:a.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(b,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:T=>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 Q=A(K,[["__scopeId","data-v-0c31f6b2"]]);export{Q as default};
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{d as F,u as S,G as k,an as j,h as d,c as s,aq as M,e1 as U,r as W,bh as G,Z as V,dq as Z,P as N,cb as z}from"./index-db391c6a.js";var H=function(){return{prefixCls:String,checked:{type:Boolean,default:void 0},onChange:{type:Function},onClick:{type:Function},"onUpdate:checked":Function}},J=F({compatConfig:{MODE:3},name:"ACheckableTag",props:H(),setup:function(e,i){var l=i.slots,r=i.emit,g=S("tag",e),u=g.prefixCls,o=function(C){var v=e.checked;r("update:checked",!v),r("change",!v),r("click",C)},p=k(function(){var a;return j(u.value,(a={},d(a,"".concat(u.value,"-checkable"),!0),d(a,"".concat(u.value,"-checkable-checked"),e.checked),a))});return function(){var a;return s("span",{class:p.value,onClick:o},[(a=l.default)===null||a===void 0?void 0:a.call(l)])}}});const b=J;var K=new RegExp("^(".concat(M.join("|"),")(-inverse)?$")),L=new RegExp("^(".concat(U.join("|"),")$")),Q=function(){return{prefixCls:String,color:{type:String},closable:{type:Boolean,default:!1},closeIcon:N.any,visible:{type:Boolean,default:void 0},onClose:{type:Function},"onUpdate:visible":Function,icon:N.any}},f=F({compatConfig:{MODE:3},name:"ATag",props:Q(),slots:["closeIcon","icon"],setup:function(e,i){var l=i.slots,r=i.emit,g=i.attrs,u=S("tag",e),o=u.prefixCls,p=u.direction,a=W(!0);G(function(){e.visible!==void 0&&(a.value=e.visible)});var C=function(t){t.stopPropagation(),r("update:visible",!1),r("close",t),!t.defaultPrevented&&e.visible===void 0&&(a.value=!1)},v=k(function(){var n=e.color;return n?K.test(n)||L.test(n):!1}),E=k(function(){var n;return j(o.value,(n={},d(n,"".concat(o.value,"-").concat(e.color),v.value),d(n,"".concat(o.value,"-has-color"),e.color&&!v.value),d(n,"".concat(o.value,"-hidden"),!a.value),d(n,"".concat(o.value,"-rtl"),p.value==="rtl"),n))});return function(){var n,t,h,m=e.icon,R=m===void 0?(n=l.icon)===null||n===void 0?void 0:n.call(l):m,y=e.color,_=e.closeIcon,P=_===void 0?(t=l.closeIcon)===null||t===void 0?void 0:t.call(l):_,x=e.closable,w=x===void 0?!1:x,B=function(){return w?P?s("span",{class:"".concat(o.value,"-close-icon"),onClick:C},[P]):s(z,{class:"".concat(o.value,"-close-icon"),onClick:C},null):null},O={backgroundColor:y&&!v.value?y:void 0},I=R||null,T=(h=l.default)===null||h===void 0?void 0:h.call(l),q=I?s(V,null,[I,s("span",null,[T])]):T,A="onClick"in g,$=s("span",{class:E.value,style:O},[q,B()]);return A?s(Z,null,{default:function(){return[$]}}):$}}});f.CheckableTag=b;f.install=function(c){return c.component(f.name,f),c.component(b.name,b),c};const Y=f;export{Y as _};
|
import{d as F,u as S,G as k,an as j,h as d,c as s,aq as U,e5 as W,r as q,bh as G,Z as V,du as Z,P as N,cb as z}from"./index-5c24d9cc.js";var H=function(){return{prefixCls:String,checked:{type:Boolean,default:void 0},onChange:{type:Function},onClick:{type:Function},"onUpdate:checked":Function}},J=F({compatConfig:{MODE:3},name:"ACheckableTag",props:H(),setup:function(e,i){var l=i.slots,r=i.emit,g=S("tag",e),u=g.prefixCls,o=function(C){var v=e.checked;r("update:checked",!v),r("change",!v),r("click",C)},p=k(function(){var a;return j(u.value,(a={},d(a,"".concat(u.value,"-checkable"),!0),d(a,"".concat(u.value,"-checkable-checked"),e.checked),a))});return function(){var a;return s("span",{class:p.value,onClick:o},[(a=l.default)===null||a===void 0?void 0:a.call(l)])}}});const b=J;var K=new RegExp("^(".concat(U.join("|"),")(-inverse)?$")),L=new RegExp("^(".concat(W.join("|"),")$")),Q=function(){return{prefixCls:String,color:{type:String},closable:{type:Boolean,default:!1},closeIcon:N.any,visible:{type:Boolean,default:void 0},onClose:{type:Function},"onUpdate:visible":Function,icon:N.any}},f=F({compatConfig:{MODE:3},name:"ATag",props:Q(),slots:["closeIcon","icon"],setup:function(e,i){var l=i.slots,r=i.emit,g=i.attrs,u=S("tag",e),o=u.prefixCls,p=u.direction,a=q(!0);G(function(){e.visible!==void 0&&(a.value=e.visible)});var C=function(t){t.stopPropagation(),r("update:visible",!1),r("close",t),!t.defaultPrevented&&e.visible===void 0&&(a.value=!1)},v=k(function(){var n=e.color;return n?K.test(n)||L.test(n):!1}),E=k(function(){var n;return j(o.value,(n={},d(n,"".concat(o.value,"-").concat(e.color),v.value),d(n,"".concat(o.value,"-has-color"),e.color&&!v.value),d(n,"".concat(o.value,"-hidden"),!a.value),d(n,"".concat(o.value,"-rtl"),p.value==="rtl"),n))});return function(){var n,t,h,m=e.icon,R=m===void 0?(n=l.icon)===null||n===void 0?void 0:n.call(l):m,y=e.color,_=e.closeIcon,P=_===void 0?(t=l.closeIcon)===null||t===void 0?void 0:t.call(l):_,x=e.closable,w=x===void 0?!1:x,B=function(){return w?P?s("span",{class:"".concat(o.value,"-close-icon"),onClick:C},[P]):s(z,{class:"".concat(o.value,"-close-icon"),onClick:C},null):null},O={backgroundColor:y&&!v.value?y:void 0},I=R||null,T=(h=l.default)===null||h===void 0?void 0:h.call(l),A=I?s(V,null,[I,s("span",null,[T])]):T,D="onClick"in g,$=s("span",{class:E.value,style:O},[A,B()]);return D?s(Z,null,{default:function(){return[$]}}):$}}});f.CheckableTag=b;f.install=function(c){return c.component(f.name,f),c.component(b.name,b),c};const Y=f;export{Y as _};
|
||||||
|
|
@ -1 +1 @@
|
||||||
import{cw as j,ay as z,d as K,j as U,dp as $,w as g,r as b,G as S,m as A,u as D,o as E,az as G,h as d,c as s,a as C,aw as H,bf as L,g as _,dq as W,P as c,dr as x}from"./index-db391c6a.js";var q=z("small","default"),R=function(){return{id:String,prefixCls:String,size:c.oneOf(q),disabled:{type:Boolean,default:void 0},checkedChildren:c.any,unCheckedChildren:c.any,tabindex:c.oneOfType([c.string,c.number]),autofocus:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},checked:c.oneOfType([c.string,c.number,c.looseBool]),checkedValue:c.oneOfType([c.string,c.number,c.looseBool]).def(!0),unCheckedValue:c.oneOfType([c.string,c.number,c.looseBool]).def(!1),onChange:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onMouseup:{type:Function},"onUpdate:checked":{type:Function},onBlur:Function,onFocus:Function}},J=K({compatConfig:{MODE:3},name:"ASwitch",__ANT_SWITCH:!0,inheritAttrs:!1,props:R(),slots:["checkedChildren","unCheckedChildren"],setup:function(n,r){var o=r.attrs,y=r.slots,B=r.expose,l=r.emit,m=U();$(function(){g(!("defaultChecked"in o),"Switch","'defaultChecked' is deprecated, please use 'v-model:checked'"),g(!("value"in o),"Switch","`value` is not validate prop, do you mean `checked`?")});var h=b(n.checked!==void 0?n.checked:o.defaultChecked),f=S(function(){return h.value===n.checkedValue});A(function(){return n.checked},function(){h.value=n.checked});var v=D("switch",n),u=v.prefixCls,F=v.direction,T=v.size,i=b(),w=function(){var e;(e=i.value)===null||e===void 0||e.focus()},V=function(){var e;(e=i.value)===null||e===void 0||e.blur()};B({focus:w,blur:V}),E(function(){G(function(){n.autofocus&&!n.disabled&&i.value.focus()})});var k=function(e,t){n.disabled||(l("update:checked",e),l("change",e,t),m.onFieldChange())},I=function(e){l("blur",e)},N=function(e){w();var t=f.value?n.unCheckedValue:n.checkedValue;k(t,e),l("click",t,e)},M=function(e){e.keyCode===x.LEFT?k(n.unCheckedValue,e):e.keyCode===x.RIGHT&&k(n.checkedValue,e),l("keydown",e)},O=function(e){var t;(t=i.value)===null||t===void 0||t.blur(),l("mouseup",e)},P=S(function(){var a;return a={},d(a,"".concat(u.value,"-small"),T.value==="small"),d(a,"".concat(u.value,"-loading"),n.loading),d(a,"".concat(u.value,"-checked"),f.value),d(a,"".concat(u.value,"-disabled"),n.disabled),d(a,u.value,!0),d(a,"".concat(u.value,"-rtl"),F.value==="rtl"),a});return function(){var a;return s(W,{insertExtraNode:!0},{default:function(){return[s("button",C(C(C({},H(n,["prefixCls","checkedChildren","unCheckedChildren","checked","autofocus","checkedValue","unCheckedValue","id","onChange","onUpdate:checked"])),o),{},{id:(a=n.id)!==null&&a!==void 0?a:m.id.value,onKeydown:M,onClick:N,onBlur:I,onMouseup:O,type:"button",role:"switch","aria-checked":h.value,disabled:n.disabled||n.loading,class:[o.class,P.value],ref:i}),[s("div",{class:"".concat(u.value,"-handle")},[n.loading?s(L,{class:"".concat(u.value,"-loading-icon")},null):null]),s("span",{class:"".concat(u.value,"-inner")},[f.value?_(y,n,"checkedChildren"):_(y,n,"unCheckedChildren")])])]}})}}});const X=j(J);export{X as _};
|
import{cw as j,ay as z,d as K,j as U,dt as $,w as g,r as b,G as S,m as A,u as D,o as E,az as G,h as d,c as s,a as C,aw as H,bf as L,g as _,du as W,P as u,dv as x}from"./index-5c24d9cc.js";var R=z("small","default"),q=function(){return{id:String,prefixCls:String,size:u.oneOf(R),disabled:{type:Boolean,default:void 0},checkedChildren:u.any,unCheckedChildren:u.any,tabindex:u.oneOfType([u.string,u.number]),autofocus:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},checked:u.oneOfType([u.string,u.number,u.looseBool]),checkedValue:u.oneOfType([u.string,u.number,u.looseBool]).def(!0),unCheckedValue:u.oneOfType([u.string,u.number,u.looseBool]).def(!1),onChange:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onMouseup:{type:Function},"onUpdate:checked":{type:Function},onBlur:Function,onFocus:Function}},J=K({compatConfig:{MODE:3},name:"ASwitch",__ANT_SWITCH:!0,inheritAttrs:!1,props:q(),slots:["checkedChildren","unCheckedChildren"],setup:function(n,r){var o=r.attrs,y=r.slots,B=r.expose,l=r.emit,m=U();$(function(){g(!("defaultChecked"in o),"Switch","'defaultChecked' is deprecated, please use 'v-model:checked'"),g(!("value"in o),"Switch","`value` is not validate prop, do you mean `checked`?")});var h=b(n.checked!==void 0?n.checked:o.defaultChecked),f=S(function(){return h.value===n.checkedValue});A(function(){return n.checked},function(){h.value=n.checked});var v=D("switch",n),c=v.prefixCls,F=v.direction,T=v.size,i=b(),w=function(){var e;(e=i.value)===null||e===void 0||e.focus()},V=function(){var e;(e=i.value)===null||e===void 0||e.blur()};B({focus:w,blur:V}),E(function(){G(function(){n.autofocus&&!n.disabled&&i.value.focus()})});var k=function(e,t){n.disabled||(l("update:checked",e),l("change",e,t),m.onFieldChange())},I=function(e){l("blur",e)},N=function(e){w();var t=f.value?n.unCheckedValue:n.checkedValue;k(t,e),l("click",t,e)},M=function(e){e.keyCode===x.LEFT?k(n.unCheckedValue,e):e.keyCode===x.RIGHT&&k(n.checkedValue,e),l("keydown",e)},O=function(e){var t;(t=i.value)===null||t===void 0||t.blur(),l("mouseup",e)},P=S(function(){var a;return a={},d(a,"".concat(c.value,"-small"),T.value==="small"),d(a,"".concat(c.value,"-loading"),n.loading),d(a,"".concat(c.value,"-checked"),f.value),d(a,"".concat(c.value,"-disabled"),n.disabled),d(a,c.value,!0),d(a,"".concat(c.value,"-rtl"),F.value==="rtl"),a});return function(){var a;return s(W,{insertExtraNode:!0},{default:function(){return[s("button",C(C(C({},H(n,["prefixCls","checkedChildren","unCheckedChildren","checked","autofocus","checkedValue","unCheckedValue","id","onChange","onUpdate:checked"])),o),{},{id:(a=n.id)!==null&&a!==void 0?a:m.id.value,onKeydown:M,onClick:N,onBlur:I,onMouseup:O,type:"button",role:"switch","aria-checked":h.value,disabled:n.disabled||n.loading,class:[o.class,P.value],ref:i}),[s("div",{class:"".concat(c.value,"-handle")},[n.loading?s(L,{class:"".concat(c.value,"-loading-icon")},null):null]),s("span",{class:"".concat(c.value,"-inner")},[f.value?_(y,n,"checkedChildren"):_(y,n,"unCheckedChildren")])])]}})}}});const X=j(J);export{X as _};
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
import{cl as e,cm as i,cn as r,co as a,b1 as n}from"./index-5c24d9cc.js";function c(s,t){return e(i(s,t,r),s+"")}function b(s){return a(s)&&n(s)}export{c as b,b as i};
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
import{cl as e,cm as i,cn as r,co as a,b1 as n}from"./index-db391c6a.js";function c(s,t){return e(i(s,t,r),s+"")}function b(s){return a(s)&&n(s)}export{c as b,b as i};
|
|
||||||
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 Z,a1 as ee,r as F,J as te,K as le,o as ie,U as v,V as N,c as i,a4 as e,W as g,a3 as n,X as k,Y as u,a5 as R,L as se,a6 as ae,af as oe,ag as $,$ as A,a2 as ne,z as w,B as re,cP as ce,cQ as de,ak as ue,ai as me,T as fe,a0 as pe}from"./index-db391c6a.js";import{u as ve,c as ge,a as ke,F as we,d as he}from"./FileItem-9be5bb5d.js";import{a as Ce,b as Se,c as _e,M as Ie,o as z,L as ye,R as xe,f as be}from"./MultiSelectKeep-cd70772d.js";import"./numInput.vue_vue_type_style_index_0_scoped_bd954eda_lang-28fed536.js";/* empty css */import"./index-4a1bd1ce.js";import"./_isIterateeCall-6ab5736a.js";import"./index-ae90fb7e.js";import"./index-83d83387.js";import"./shortcut-ace377a3.js";import"./Checkbox-be055c11.js";import"./index-30c22d1a.js";const Ve={class:"refresh-button"},Me={class:"hint"},Te={key:0,class:"preview-switch"},Fe=Z({__name:"randomImage",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(Ne){const B=ee(),m=F(!1),l=F([]),r=l,h=te(`${le}randomImageSettingNotificationShown`,!1),P=()=>{h.value||(w.info({content:re("randomImageSettingNotification"),duration:6,key:"randomImageSetting"}),h.value=!0)},f=async()=>{try{m.value=!0;const s=await ce();s.length===0&&w.warn("No data, please generate index in image search page first"),l.value=s}finally{m.value=!1,_()}},C=()=>{if(l.value.length===0){w.warn("没有图片可以浏览");return}z(l.value,o.value||0)};ie(()=>{f(),setTimeout(()=>{P()},2e3)});const{stackViewEl:K,multiSelectedIdxs:p,stack:L,scroller:U}=ve({images:l}).toRefs(),{onClearAllSelected:D,onSelectAll:E,onReverseSelect:G}=ge();Ce();const{itemSize:S,gridItems:O,cellWidth:W,onScroll:_}=ke(),{showGenInfo:c,imageGenInfo:I,q:Q,onContextMenuClick:q,onFileItemClick:H}=Se({openNext:de}),{previewIdx:o,previewing:y,onPreviewVisibleChange:J,previewImgMove:x,canPreview:b}=_e(),V=async(s,t,d)=>{L.value=[{curr:"",files:l.value}],await q(s,t,d)};return(s,t)=>{var M;const d=ue,X=me,Y=fe;return v(),N("div",{class:"container",ref_key:"stackViewEl",ref:K},[i(Ie,{show:!!e(p).length||e(B).keepMultiSelect,onClearAllSelected:e(D),onSelectAll:e(E),onReverseSelect:e(G)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),g("div",Ve,[i(d,{onClick:f,onTouchstart:R(f,["prevent"]),type:"primary",loading:m.value,shape:"round"},{default:n(()=>[k(u(s.$t("shuffle")),1)]),_:1},8,["onTouchstart","loading"]),i(d,{onClick:C,onTouchstart:R(C,["prevent"]),type:"default",disabled:!((M=l.value)!=null&&M.length),shape:"round"},{default:n(()=>[k(u(s.$t("tiktokView")),1)]),_:1},8,["onTouchstart","disabled"])]),i(Y,{visible:e(c),"onUpdate:visible":t[1]||(t[1]=a=>ae(c)?c.value=a:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=a=>c.value=!1)},{cancelText:n(()=>[]),default:n(()=>[i(X,{active:"",loading:!e(Q).isIdle},{default:n(()=>[g("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=a=>e(se)(e(I)))},[g("div",Me,u(s.$t("doubleClickToCopy")),1),k(" "+u(e(I)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),i(e(he),{ref_key:"scroller",ref:U,class:"file-list",items:l.value.slice(),"item-size":e(S).first,"key-field":"fullpath","item-secondary-size":e(S).second,gridItems:e(O),onScroll:e(_)},{default:n(({item:a,index:T})=>[i(we,{idx:T,file:a,"cell-width":e(W),"full-screen-preview-image-url":e(r)[e(o)]?e(oe)(e(r)[e(o)]):"",onContextMenuClick:V,onPreviewVisibleChange:e(J),"is-selected-mutil-files":e(p).length>1,selected:e(p).includes(T),onFileItemClick:e(H),onTiktokView:(Re,j)=>e(z)(l.value,j)},null,8,["idx","file","cell-width","full-screen-preview-image-url","onPreviewVisibleChange","is-selected-mutil-files","selected","onFileItemClick","onTiktokView"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"]),e(y)?(v(),N("div",Te,[i(e(ye),{onClick:t[3]||(t[3]=a=>e(x)("prev")),class:$({disable:!e(b)("prev")})},null,8,["class"]),i(e(xe),{onClick:t[4]||(t[4]=a=>e(x)("next")),class:$({disable:!e(b)("next")})},null,8,["class"])])):A("",!0),e(y)&&e(r)&&e(r)[e(o)]?(v(),ne(be,{key:1,file:e(r)[e(o)],idx:e(o),onContextMenuClick:V},null,8,["file","idx"])):A("",!0)],512)}}});const We=pe(Fe,[["__scopeId","data-v-e1531e89"]]);export{We as default};
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
import{d as Z,a1 as ee,r as F,J as te,K as le,o as ie,U as v,V as N,c as i,a4 as e,W as g,a3 as n,X as k,Y as u,a5 as R,L as se,a6 as ae,af as oe,ag as $,$ as A,a2 as ne,z as w,B as re,cT as ce,cU as de,ak as ue,ai as me,T as fe,a0 as pe}from"./index-5c24d9cc.js";import{u as ve,c as ge,a as ke,F as we,d as he}from"./FileItem-a3052417.js";import{a as Ce,b as Se,c as _e,M as Ie,o as z,L as ye,R as xe,f as be}from"./MultiSelectKeep-1a825db5.js";import"./numInput.vue_vue_type_style_index_0_scoped_bd954eda_lang-86f0bbbc.js";/* empty css */import"./index-ea65c04c.js";import"./_isIterateeCall-cb6f4b91.js";import"./index-9849295f.js";import"./index-414d2170.js";import"./shortcut-4ba32b6b.js";import"./Checkbox-7d70d666.js";import"./index-9a35a2b1.js";const Te={class:"refresh-button"},Ve={class:"hint"},Me={key:0,class:"preview-switch"},Fe=Z({__name:"randomImage",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(Ne){const B=ee(),m=F(!1),l=F([]),r=l,h=te(`${le}randomImageSettingNotificationShown`,!1),P=()=>{h.value||(w.info({content:re("randomImageSettingNotification"),duration:6,key:"randomImageSetting"}),h.value=!0)},f=async()=>{try{m.value=!0;const s=await ce();s.length===0&&w.warn("No data, please generate index in image search page first"),l.value=s}finally{m.value=!1,_()}},C=()=>{if(l.value.length===0){w.warn("没有图片可以浏览");return}z(l.value,o.value||0)};ie(()=>{f(),setTimeout(()=>{P()},2e3)});const{stackViewEl:U,multiSelectedIdxs:p,stack:K,scroller:L}=ve({images:l}).toRefs(),{onClearAllSelected:D,onSelectAll:E,onReverseSelect:G}=ge();Ce();const{itemSize:S,gridItems:O,cellWidth:W,onScroll:_}=ke(),{showGenInfo:c,imageGenInfo:I,q,onContextMenuClick:H,onFileItemClick:J}=Se({openNext:de}),{previewIdx:o,previewing:y,onPreviewVisibleChange:Q,previewImgMove:x,canPreview:b}=_e(),T=async(s,t,d)=>{K.value=[{curr:"",files:l.value}],await H(s,t,d)};return(s,t)=>{var V;const d=ue,X=me,Y=fe;return v(),N("div",{class:"container",ref_key:"stackViewEl",ref:U},[i(Ie,{show:!!e(p).length||e(B).keepMultiSelect,onClearAllSelected:e(D),onSelectAll:e(E),onReverseSelect:e(G)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),g("div",Te,[i(d,{onClick:f,onTouchstart:R(f,["prevent"]),type:"primary",loading:m.value,shape:"round"},{default:n(()=>[k(u(s.$t("shuffle")),1)]),_:1},8,["onTouchstart","loading"]),i(d,{onClick:C,onTouchstart:R(C,["prevent"]),type:"default",disabled:!((V=l.value)!=null&&V.length),shape:"round"},{default:n(()=>[k(u(s.$t("tiktokView")),1)]),_:1},8,["onTouchstart","disabled"])]),i(Y,{visible:e(c),"onUpdate:visible":t[1]||(t[1]=a=>ae(c)?c.value=a:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=a=>c.value=!1)},{cancelText:n(()=>[]),default:n(()=>[i(X,{active:"",loading:!e(q).isIdle},{default:n(()=>[g("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=a=>e(se)(e(I)))},[g("div",Ve,u(s.$t("doubleClickToCopy")),1),k(" "+u(e(I)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),i(e(he),{ref_key:"scroller",ref:L,class:"file-list",items:l.value.slice(),"item-size":e(S).first,"key-field":"fullpath","item-secondary-size":e(S).second,gridItems:e(O),onScroll:e(_)},{default:n(({item:a,index:M})=>[i(we,{idx:M,file:a,"cell-width":e(W),"full-screen-preview-image-url":e(r)[e(o)]?e(oe)(e(r)[e(o)]):"",onContextMenuClick:T,onPreviewVisibleChange:e(Q),"is-selected-mutil-files":e(p).length>1,selected:e(p).includes(M),onFileItemClick:e(J),onTiktokView:(Re,j)=>e(z)(l.value,j)},null,8,["idx","file","cell-width","full-screen-preview-image-url","onPreviewVisibleChange","is-selected-mutil-files","selected","onFileItemClick","onTiktokView"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"]),e(y)?(v(),N("div",Me,[i(e(ye),{onClick:t[3]||(t[3]=a=>e(x)("prev")),class:$({disable:!e(b)("prev")})},null,8,["class"]),i(e(xe),{onClick:t[4]||(t[4]=a=>e(x)("next")),class:$({disable:!e(b)("next")})},null,8,["class"])])):A("",!0),e(y)&&e(r)&&e(r)[e(o)]?(v(),ne(be,{key:1,file:e(r)[e(o)],idx:e(o),onContextMenuClick:T},null,8,["file","idx"])):A("",!0)],512)}}});const We=pe(Fe,[["__scopeId","data-v-e1531e89"]]);export{We as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{u as G,g as d}from"./FileItem-9be5bb5d.js";import{r as b,t as j,ct as m,cu as y,cv as D}from"./index-db391c6a.js";const r=new Map,A=()=>{const{useEventListen:k,sortedFiles:f,getViewableAreaFiles:w}=G().toRefs(),c=b(d.defaultChangeIndchecked),u=b(d.defaultSeedChangeChecked),g=async()=>{if(await j(100),!c.value)return;const o=w.value().filter(e=>m(e.fullpath)&&!e.gen_info_obj);if(!o.length)return;const t=await y(o.map(e=>e.fullpath).filter(e=>!r.has(e)));o.forEach(e=>{const i=t[e.fullpath]||r.get(e.fullpath)||"";r.set(e.fullpath,i),e.gen_info_obj=D(i),e.gen_info_raw=i})};k.value("viewableAreaFilesChange",g);const F=o=>{const t=f.value;return[o,u.value,t[o-1],t[o],t[o+1]]};function I(o,t,e,i){const a={diff:{},empty:!0,ownFile:"",otherFile:""};if(t+e<0||t+e>=f.value.length||f.value[t]==null||!("gen_info_obj"in f.value[t])||!("gen_info_obj"in f.value[t+e]))return a;const l=o,s=f.value[t+e].gen_info_obj;if(s==null)return a;const h=["hashes","resources"];a.diff={},a.ownFile=i.name,a.otherFile=f.value[t+e].name,a.empty=!1,u.value||h.push("seed");for(const n in l)if(!h.includes(n)){if(!(n in s)){a.diff[n]="+";continue}if(l[n]!=s[n])if(n.includes("rompt")&&l[n]!=""&&s[n]!=""){const p=l[n].split(","),C=s[n].split(",");let _=0;for(const v in p)p[v]!=C[v]&&_++;a.diff[n]=_}else a.diff[n]=[l[n],s[n]]}return a}return{getGenDiff:I,changeIndchecked:c,seedChangeChecked:u,getRawGenParams:()=>g(),getGenDiffWatchDep:F}};export{A as u};
|
import{u as G,g as d}from"./FileItem-a3052417.js";import{r as b,t as j,ct as m,cu as y,cv as D}from"./index-5c24d9cc.js";const r=new Map,A=()=>{const{useEventListen:k,sortedFiles:f,getViewableAreaFiles:w}=G().toRefs(),c=b(d.defaultChangeIndchecked),u=b(d.defaultSeedChangeChecked),g=async()=>{if(await j(100),!c.value)return;const o=w.value().filter(e=>m(e.fullpath)&&!e.gen_info_obj);if(!o.length)return;const t=await y(o.map(e=>e.fullpath).filter(e=>!r.has(e)));o.forEach(e=>{const i=t[e.fullpath]||r.get(e.fullpath)||"";r.set(e.fullpath,i),e.gen_info_obj=D(i),e.gen_info_raw=i})};k.value("viewableAreaFilesChange",g);const F=o=>{const t=f.value;return[o,u.value,t[o-1],t[o],t[o+1]]};function I(o,t,e,i){const a={diff:{},empty:!0,ownFile:"",otherFile:""};if(t+e<0||t+e>=f.value.length||f.value[t]==null||!("gen_info_obj"in f.value[t])||!("gen_info_obj"in f.value[t+e]))return a;const l=o,s=f.value[t+e].gen_info_obj;if(s==null)return a;const h=["hashes","resources"];a.diff={},a.ownFile=i.name,a.otherFile=f.value[t+e].name,a.empty=!1,u.value||h.push("seed");for(const n in l)if(!h.includes(n)){if(!(n in s)){a.diff[n]="+";continue}if(l[n]!=s[n])if(n.includes("rompt")&&l[n]!=""&&s[n]!=""){const p=l[n].split(","),C=s[n].split(",");let _=0;for(const v in p)p[v]!=C[v]&&_++;a.diff[n]=_}else a.diff[n]=[l[n],s[n]]}return a}return{getGenDiff:I,changeIndchecked:c,seedChangeChecked:u,getRawGenParams:()=>g(),getGenDiffWatchDep:F}};export{A as u};
|
||||||
|
|
@ -46,6 +46,11 @@ export const de: Partial<IIBI18nMap> = {
|
||||||
topicSearchGuideStep3: 'Geben Sie einen Satz ein, um zu suchen; ähnliche Bilder werden abgerufen und die Ergebnisse geöffnet',
|
topicSearchGuideStep3: 'Geben Sie einen Satz ein, um zu suchen; ähnliche Bilder werden abgerufen und die Ergebnisse geöffnet',
|
||||||
topicSearchGuideEmptyReasonNoScope: 'Leer, weil: kein Bereich ausgewählt (standardmäßig deaktiviert). Klicken Sie auf „Bereich“, um Ordner zu wählen.',
|
topicSearchGuideEmptyReasonNoScope: 'Leer, weil: kein Bereich ausgewählt (standardmäßig deaktiviert). Klicken Sie auf „Bereich“, um Ordner zu wählen.',
|
||||||
topicSearchGuideEmptyReasonNoTopics: 'Leer, weil: für diesen Bereich noch keine Themen erzeugt wurden (Aktualisieren oder Min. Cluster/Schwelle senken).',
|
topicSearchGuideEmptyReasonNoTopics: 'Leer, weil: für diesen Bereich noch keine Themen erzeugt wurden (Aktualisieren oder Min. Cluster/Schwelle senken).',
|
||||||
|
topicSearchRequirementsTitle: 'Voraussetzungen',
|
||||||
|
topicSearchRequirementsOpenai: 'Erforderlich: OPENAI_BASE_URL und OPENAI_API_KEY (Backend-Umgebungsvariablen)',
|
||||||
|
topicSearchRequirementsDepsPython: 'Erforderlich: Python-Abhängigkeiten numpy und hnswlib (ohne sie ist die Funktion deaktiviert)',
|
||||||
|
topicSearchRequirementsDepsDesktop: 'Desktop-App: Abhängigkeiten sind enthalten (numpy/hnswlib müssen nicht installiert werden)',
|
||||||
|
topicSearchRequirementsInstallCmd: 'Installation: pip install numpy hnswlib',
|
||||||
topicSearchJobFailed: 'Job fehlgeschlagen',
|
topicSearchJobFailed: 'Job fehlgeschlagen',
|
||||||
topicSearchJobStage: 'Phase',
|
topicSearchJobStage: 'Phase',
|
||||||
topicSearchJobQueued: 'Job in Warteschlange…',
|
topicSearchJobQueued: 'Job in Warteschlange…',
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,11 @@ export const en: IIBI18nMap = {
|
||||||
topicSearchGuideStep3: 'Type a sentence to search; it will retrieve similar images and open the result page',
|
topicSearchGuideStep3: 'Type a sentence to search; it will retrieve similar images and open the result page',
|
||||||
topicSearchGuideEmptyReasonNoScope: 'Empty because: no scope selected (disabled by default). Click “Scope” to choose folders.',
|
topicSearchGuideEmptyReasonNoScope: 'Empty because: no scope selected (disabled by default). Click “Scope” to choose folders.',
|
||||||
topicSearchGuideEmptyReasonNoTopics: 'Empty because: no topics generated yet for this scope (try Refresh or lower Min cluster/Threshold).',
|
topicSearchGuideEmptyReasonNoTopics: 'Empty because: no topics generated yet for this scope (try Refresh or lower Min cluster/Threshold).',
|
||||||
|
topicSearchRequirementsTitle: 'Requirements',
|
||||||
|
topicSearchRequirementsOpenai: 'Required: OPENAI_BASE_URL and OPENAI_API_KEY (backend environment variables)',
|
||||||
|
topicSearchRequirementsDepsPython: 'Required: Python deps numpy and hnswlib (feature is disabled if missing)',
|
||||||
|
topicSearchRequirementsDepsDesktop: 'Desktop app: deps are bundled (no need to install numpy/hnswlib)',
|
||||||
|
topicSearchRequirementsInstallCmd: 'Install: pip install numpy hnswlib',
|
||||||
topicSearchJobFailed: 'Job failed',
|
topicSearchJobFailed: 'Job failed',
|
||||||
topicSearchJobStage: 'Stage',
|
topicSearchJobStage: 'Stage',
|
||||||
topicSearchJobQueued: 'Job queued…',
|
topicSearchJobQueued: 'Job queued…',
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,11 @@ export const zhHans = {
|
||||||
topicSearchGuideStep3: '输入一句话搜索,会召回相似图片并打开结果页',
|
topicSearchGuideStep3: '输入一句话搜索,会召回相似图片并打开结果页',
|
||||||
topicSearchGuideEmptyReasonNoScope: '当前为空:未选择范围(已默认关闭),请先点“范围”选择文件夹',
|
topicSearchGuideEmptyReasonNoScope: '当前为空:未选择范围(已默认关闭),请先点“范围”选择文件夹',
|
||||||
topicSearchGuideEmptyReasonNoTopics: '当前为空:该范围内还未生成主题(可点刷新,或调低最小组/阈值)',
|
topicSearchGuideEmptyReasonNoTopics: '当前为空:该范围内还未生成主题(可点刷新,或调低最小组/阈值)',
|
||||||
|
topicSearchRequirementsTitle: '使用前置条件',
|
||||||
|
topicSearchRequirementsOpenai: '必须配置:OPENAI_BASE_URL、OPENAI_API_KEY(后端环境变量)',
|
||||||
|
topicSearchRequirementsDepsPython: '必须安装:Python 依赖 numpy、hnswlib(缺少则功能不可用)',
|
||||||
|
topicSearchRequirementsDepsDesktop: '桌面客户端:已内置依赖(无需手动安装 numpy/hnswlib)',
|
||||||
|
topicSearchRequirementsInstallCmd: '安装命令:pip install numpy hnswlib',
|
||||||
topicSearchJobFailed: '任务失败',
|
topicSearchJobFailed: '任务失败',
|
||||||
topicSearchJobStage: '阶段',
|
topicSearchJobStage: '阶段',
|
||||||
topicSearchJobQueued: '已提交任务,准备开始…',
|
topicSearchJobQueued: '已提交任务,准备开始…',
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,11 @@ export const zhHant: Partial<IIBI18nMap> = {
|
||||||
topicSearchGuideStep3: '輸入一句話搜尋,召回相似圖片並打開結果頁',
|
topicSearchGuideStep3: '輸入一句話搜尋,召回相似圖片並打開結果頁',
|
||||||
topicSearchGuideEmptyReasonNoScope: '目前為空:尚未選擇範圍(預設關閉),請先點「範圍」選擇資料夾',
|
topicSearchGuideEmptyReasonNoScope: '目前為空:尚未選擇範圍(預設關閉),請先點「範圍」選擇資料夾',
|
||||||
topicSearchGuideEmptyReasonNoTopics: '目前為空:此範圍尚未生成主題(可點刷新,或調低最小組/閾值)',
|
topicSearchGuideEmptyReasonNoTopics: '目前為空:此範圍尚未生成主題(可點刷新,或調低最小組/閾值)',
|
||||||
|
topicSearchRequirementsTitle: '使用前置條件',
|
||||||
|
topicSearchRequirementsOpenai: '必須配置:OPENAI_BASE_URL、OPENAI_API_KEY(後端環境變數)',
|
||||||
|
topicSearchRequirementsDepsPython: '必須安裝:Python 依賴 numpy、hnswlib(缺少則功能不可用)',
|
||||||
|
topicSearchRequirementsDepsDesktop: '桌面客戶端:已內建依賴(無需手動安裝 numpy/hnswlib)',
|
||||||
|
topicSearchRequirementsInstallCmd: '安裝命令:pip install numpy hnswlib',
|
||||||
topicSearchJobFailed: '任務失敗',
|
topicSearchJobFailed: '任務失敗',
|
||||||
topicSearchJobStage: '階段',
|
topicSearchJobStage: '階段',
|
||||||
topicSearchJobQueued: '已提交任務,準備開始…',
|
topicSearchJobQueued: '已提交任務,準備開始…',
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import { useGlobalStore } from '@/store/useGlobalStore'
|
||||||
import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
|
import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
|
||||||
import { uniqueId } from 'lodash-es'
|
import { uniqueId } from 'lodash-es'
|
||||||
import { message } from 'ant-design-vue'
|
import { message } from 'ant-design-vue'
|
||||||
|
import { isTauri } from '@/util/env'
|
||||||
|
import { useLocalStorage } from '@vueuse/core'
|
||||||
|
|
||||||
const props = defineProps<{ tabIdx: number; paneIdx: number }>()
|
const props = defineProps<{ tabIdx: number; paneIdx: number }>()
|
||||||
const g = useGlobalStore()
|
const g = useGlobalStore()
|
||||||
|
|
@ -23,6 +25,13 @@ const threshold = ref(0.86)
|
||||||
const minClusterSize = ref(2)
|
const minClusterSize = ref(2)
|
||||||
const result = ref<ClusterIibOutputResp | null>(null)
|
const result = ref<ClusterIibOutputResp | null>(null)
|
||||||
|
|
||||||
|
const _REQS_LS_KEY = 'iib_topic_search_hide_requirements_v1'
|
||||||
|
// true = show requirements; false = hidden
|
||||||
|
const showRequirements = useLocalStorage<boolean>(_REQS_LS_KEY, true)
|
||||||
|
const hideRequirements = () => {
|
||||||
|
showRequirements.value = false
|
||||||
|
}
|
||||||
|
|
||||||
const job = ref<ClusterIibOutputJobStatusResp | null>(null)
|
const job = ref<ClusterIibOutputJobStatusResp | null>(null)
|
||||||
const jobId = ref<string>('')
|
const jobId = ref<string>('')
|
||||||
let _jobTimer: any = null
|
let _jobTimer: any = null
|
||||||
|
|
@ -343,6 +352,41 @@ watch(
|
||||||
show-icon
|
show-icon
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<a-alert
|
||||||
|
v-if="showRequirements"
|
||||||
|
type="info"
|
||||||
|
show-icon
|
||||||
|
closable
|
||||||
|
style="margin: 10px 0 0 0;"
|
||||||
|
:message="$t('topicSearchRequirementsTitle')"
|
||||||
|
@close="hideRequirements"
|
||||||
|
>
|
||||||
|
<template #description>
|
||||||
|
<div style="display: grid; gap: 6px;">
|
||||||
|
<div>
|
||||||
|
<span style="margin-right: 6px;">🔑</span>
|
||||||
|
<span>{{ $t('topicSearchRequirementsOpenai') }}</span>
|
||||||
|
</div>
|
||||||
|
<template v-if="isTauri">
|
||||||
|
<div>
|
||||||
|
<span style="margin-right: 6px;">🧩</span>
|
||||||
|
<span>{{ $t('topicSearchRequirementsDepsDesktop') }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div>
|
||||||
|
<span style="margin-right: 6px;">🐍</span>
|
||||||
|
<span>{{ $t('topicSearchRequirementsDepsPython') }}</span>
|
||||||
|
</div>
|
||||||
|
<div style="opacity: 0.85;">
|
||||||
|
<span style="margin-right: 6px;">💻</span>
|
||||||
|
<span>{{ $t('topicSearchRequirementsInstallCmd') }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</a-alert>
|
||||||
|
|
||||||
<div v-if="jobRunning" style="margin: 10px 0 0 0;">
|
<div v-if="jobRunning" style="margin: 10px 0 0 0;">
|
||||||
<a-alert type="info" show-icon :message="jobStageText" :description="jobDesc" />
|
<a-alert type="info" show-icon :message="jobStageText" :description="jobDesc" />
|
||||||
<a-progress :percent="jobPercent" size="small" style="margin-top: 8px;" />
|
<a-progress :percent="jobPercent" size="small" style="margin-top: 8px;" />
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue