import{d as Be,o as He,M as Je,a as o,c as i,b as qe,B as je,e as a,F as ee,r as se,t as r,w as Oe,v as Ve,f as h,O as pe,n as Ke,g,h as H,i as J,E as d,a5 as Ye,a6 as Qe,V as he,a7 as We,a8 as Xe,a9 as Ze,s as es,aa as ss,ab as ts,a3 as as,ac as ls,_ as ns,q as rs,u as os}from"./java-modules-B8c-YG5x.js";import{e as is}from"./brand-COze15GJ.js";import{c as us}from"./categorized-timers-JPA-olTr.js";const cs={class:"page-shell module-page"},ds={class:"main-content"},fs={class:"left-panel"},vs={class:"upload-zone"},gs={class:"selected-files"},ps={key:0},hs={class:"condition-card"},ks={class:"switch-row"},_s={class:"run-row"},ys=["disabled"],Is=["disabled"],ws={key:0,class:"parse-card"},Ss={key:1,class:"queue-payload"},Ps={class:"right-panel"},Cs={class:"task-list-wrap"},bs={class:"clean-result-summary"},ms={class:"summary-card"},Ns={class:"summary-card"},Ts={class:"summary-card"},Fs={class:"summary-card"},Rs={class:"result-list-wrap"},Es={key:0,class:"empty-tasks"},As={key:1,class:"task-list clean-result-list"},Us={class:"left"},Ds={class:"id"},xs={class:"files"},$s={class:"files"},Ms={class:"files"},zs={class:"files"},Gs={key:0,class:"files result-hint"},Ls={key:1,class:"file-progress"},Bs={class:"file-progress-meta"},Hs={class:"file-progress-track"},Js={key:0,class:"file-progress-count"},qs={class:"task-right"},js={class:"status running"},Os=["onClick"],Vs={class:"result-list-wrap"},Ks={key:0,class:"empty-tasks"},Ys={key:1,class:"task-list clean-result-list"},Qs={class:"left"},Ws={class:"id"},Xs={class:"files"},Zs={class:"files"},et={class:"files"},st={key:0,class:"files"},tt={key:1,class:"files result-hint"},at={key:2,class:"file-progress"},lt={class:"file-progress-meta"},nt={class:"file-progress-track"},rt={key:0,class:"file-progress-count"},ot={key:3,class:"files"},it={class:"task-right"},ut=["onClick"],ct=["onClick"],dt=3e3,ft=Be({__name:"BrandSimilarAsinTab",setup(gt){const A=g([]),C=g([]),_=g(null),b=g(null),U=g(!1),D=g(!1),q=g(!1),I=g(""),f=g([]),u=g([]),k=g(null),j=g(!1);let m=null,te=0,N=!1;const T=us("similar-asin"),F=g({pendingTaskCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),v=g([]),R=H(()=>_.value||b.value),O=H(()=>{const e=_.value;return!e?.taskId||v.value.some(t=>t.taskId===e.taskId)?null:{taskId:e.taskId,sourceFilename:e.sourceFilename,rowCount:e.acceptedRows,taskStatus:"PENDING",success:!1}}),ae=H(()=>{const e=new Set([...f.value,...u.value]),s=v.value.filter(l=>{const n=y(l);return l.taskId!=null&&(e.has(l.taskId)||n==="RUNNING"||n==="PENDING")});return O.value?s.some(l=>l.taskId===O.value?.taskId)?s:[O.value,...s]:s}),le=H(()=>v.value.filter(e=>{const s=y(e);return s!=="RUNNING"&&s!=="PENDING"}));function x(){return as("similar-asin").trim()}function $(e){if(!e)return"-";const s=new Date(e);if(Number.isNaN(s.getTime()))return e;const t=s.getFullYear(),l=String(s.getMonth()+1).padStart(2,"0"),n=String(s.getDate()).padStart(2,"0"),c=String(s.getHours()).padStart(2,"0"),p=String(s.getMinutes()).padStart(2,"0"),B=String(s.getSeconds()).padStart(2,"0");return`${t}-${l}-${n} ${c}:${p}:${B}`}function ke(e){return e?e.length<=10?"***":`${e.slice(0,6)}***${e.slice(-4)}`:""}function _e(e){return{...e,data:e.data?{...e.data,api_key:ke(String(e.data.api_key||""))}:e.data}}function ne(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function ye(){return Number(ne())||0}function V(){return`similar-asin:tasks:${ne()}`}function Ie(e){return{taskId:e.taskId,totalRows:e.totalRows,acceptedRows:e.acceptedRows,groupCount:e.groupCount,droppedRows:e.droppedRows}}function w(){if(typeof window>"u")return;const e=Array.from(new Set([...f.value,...u.value]));e.length?window.localStorage.setItem(V(),JSON.stringify(e)):window.localStorage.removeItem(V())}function we(){if(!(typeof window>"u"))try{const e=window.localStorage.getItem(V()),s=e?JSON.parse(e):[];f.value=Array.isArray(s)?s.filter(t=>typeof t=="number"&&t>0):[]}catch{f.value=[]}}async function re(e){const s=J();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传能力");const t=[];for(const l of e){const n=typeof l=="string"?l:l.absolutePath,c=typeof l=="string"?void 0:l.relativePath,p=await s.upload_file_to_java(n,c);if(!p?.success||!p.data)throw new Error(p?.error||p?.message||`上传失败:${n}`);t.push(p.data)}return t}async function Se(){const e=J();if(!e?.select_brand_xlsx_files||!e.upload_file_to_java){d.warning("当前桌面端未提供文件选择或上传能力");return}const s=await e.select_brand_xlsx_files();if(!s?.length)return;const t=await re(s);C.value=t,A.value=t.map(l=>l.relativePath||l.originalFilename||l.fileKey),_.value=null,b.value=null,I.value=""}async function Pe(){const e=J();if(!e?.select_brand_folder||!e.upload_file_to_java){d.warning("当前桌面端未提供文件夹选择或上传能力");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await is(s);if(!t.success||!t.items?.length){d.warning(t.error||"该文件夹下没有可用的 xlsx 文件");return}const l=await re(t.items);C.value=l,A.value=t.items.map(n=>n.relativePath||n.absolutePath),_.value=null,b.value=null,I.value="",d.success(`已选择文件夹内 ${t.items.length} 个 Excel 文件`)}catch(s){d.error(s instanceof Error?s.message:"选择失败")}}async function Ce(){if(!C.value.length){d.warning("请先选择 Excel");return}if(!x()){d.warning("请先在左上角设置中填写货源查询密钥");return}U.value=!0;try{const e=C.value.map(t=>({fileKey:t.fileKey,originalFilename:t.originalFilename,relativePath:t.relativePath})),s=await Ye(e,x(),q.value);_.value=s,b.value=null,I.value="",d.success(`解析完成,共 ${s.acceptedRows} 条`)}catch(e){d.error(e instanceof Error?e.message:"解析失败")}finally{U.value=!1}}async function be(){const e=J(),s=_.value,t=s?.taskId;if(!t){d.warning("请先解析文件");return}if(!e?.enqueue_json){d.error("当前环境未启用 pywebview enqueue_json");return}if(!x()){d.warning("请先在左上角设置中填写货源查询密钥");return}D.value=!0;try{const l={type:"similar-asin-run",ts:Date.now(),data:{taskId:t,user_id:ye(),api_key:x(),sourceFileCount:s.sourceFileCount||0,totalRows:s.totalRows||0,acceptedRows:s.acceptedRows||0,groupCount:s.groupCount||0}};I.value=JSON.stringify(_e(l),null,2),await Qe(t);const n=await e.enqueue_json(l);if(!n?.success){d.error(n?.error||"推送失败");return}b.value=Ie(s),Ne(t),me(),await M(),await z({force:!0}),d.success("已推送到 Python 队列")}finally{D.value=!1}}function me(){_.value=null,I.value=""}function Ne(e){f.value.includes(e)||(f.value=[...f.value,e],w()),S()}function K(e){f.value=f.value.filter(s=>s!==e),w()}function Te(e){u.value.includes(e)||(u.value=[...u.value,e],w()),S()}function Y(e){u.value=u.value.filter(s=>s!==e),w()}function S(){N||k.value==null&&Fe(!0)}function oe(){k.value!=null&&(T.clearTimer("task-poll",k.value),k.value=null)}function Fe(e=!1){if(N)return;if(k.value!=null){if(!e)return;T.clearTimer("task-poll",k.value),k.value=null}const s=async()=>{k.value=null,!N&&(!f.value.length&&!u.value.length||(await Re(),!N&&k.value==null&&(f.value.length||u.value.length)&&(k.value=T.setTimeout("task-poll",s,he()))))};e?s():k.value=T.setTimeout("task-poll",s,he())}async function Re(){if(j.value||!f.value.length&&!u.value.length){!f.value.length&&!u.value.length&&oe();return}j.value=!0;try{let e=!1,s=!1;const t=Array.from(new Set([...f.value,...u.value]));if(t.length){const l=await ls(t,{force:u.value.length>0});for(const n of l.items||[]){const c=n.task;if(!c?.id)continue;const p=n.items?.[0];if(p&&Ee(p),(c.status==="SUCCESS"||c.status==="FAILED")&&(K(c.id),e=!0,c.status==="SUCCESS"?Te(c.id):Y(c.id)),p&&c.status==="SUCCESS"&&u.value.includes(c.id)){const B=(p.fileStatus||"").toUpperCase();(p.fileReady||B==="SUCCESS"||B==="FAILED")&&(Y(c.id),e=!0,s=!0)}}l.missingTaskIds?.length&&(l.missingTaskIds.forEach(n=>{K(n),Y(n)}),s=!0,e=!0)}e&&await M(),s&&await z(),Ae()}finally{j.value=!1}}function Ee(e){if(!e.taskId&&!e.resultId)return;const s=v.value.findIndex(t=>e.resultId!=null&&t.resultId===e.resultId||e.taskId!=null&&t.taskId===e.taskId);s>=0?v.value[s]={...v.value[s],...e}:v.value=[e,...v.value]}function Ae(){if(!u.value.length)return;const e=[];for(const s of u.value){const t=v.value.find(c=>c.taskId===s);if(!t){e.push(s);continue}const l=(t.taskStatus||"").toUpperCase(),n=(t.fileStatus||"").toUpperCase();l==="FAILED"||t.fileReady||n==="SUCCESS"||n==="FAILED"||l==="SUCCESS"&&e.push(s)}u.value=e,w(),u.value.length&&S()}function Ue(){const e=v.value.filter(s=>s.taskId!=null&&P(s)).map(s=>s.taskId);u.value=Array.from(new Set(e)),w(),u.value.length&&S()}function De(){const e=v.value.filter(s=>s.taskId!=null&&y(s)==="RUNNING").map(s=>s.taskId);e.length&&(f.value=Array.from(new Set([...f.value,...e])),w(),S())}async function M(){F.value=await We()}async function z(e={}){const s=Date.now();if(!(!e.force&&v.value.length&&s-te